๐ [Python] Celery task ์ง์ ์, bind=True/False ์ต์ ?
bind ์ต์ ?
app.task(bind=True)
ํน์ @shared_task(bind=True)
์ ๊ฐ์ด Celery task๋ฅผ ์ง์ ํ๋ ๊ฒ์ ๋ง์ด ๋ณด๊ณ , ์ฌ์ฉํด์๋ค.
์ด ๋, bind=False
๋ก ๋ฐ๊พธ๋ฉด ์ด๋ป๊ฒ ๋ ๊น?
์ฌ์ค bind=True์ False ๋ ํฐ ์ฐจ์ด๋ฅผ ๋ณด์ด์ง๋ ์๋๋ค.
๋ด๊ฐ ์ ์ํ task๊ฐ self
๋ฅผ ์ธ์๋ก ๋ฐ๊ณ , self.request
์ ๊ฐ์ด self๋ฅผ ์ฐธ์กฐํ ๋ฐ์ดํฐ๋ฅผ ํ์๋ก ํ๋ ๊ฒฝ์ฐ์ bind=True
๋ก ํ๋ฉด ๋๋ค.
์๋ฅผ ๋ค์ด ์ดํด๋ณด์.
@app.task(bind=True)
@app.task(bind=True)
def debug_task(self):
print(f'Request: {self.request!r}')
@app.task(bind=True)
์์ bind=True
๋ Celery task ๋ฉ์๋๊ฐ ์๋์ผ๋ก ์ฒซ ๋ฒ์งธ ์ธ์๋ก self
๋ฅผ ๋ฐ๋๋ก ํ๋ ์ต์
์ด๋ค.
์ด ๊ฒฝ์ฐ self๋ task ์ธ์คํด์ค๋ฅผ ๊ฐ๋ฆฌํค๊ณ , ์ด๋ฅผ ํตํด task์ ์์ฑ(self.request
, self.retry
๋ฑ)์ ์ ๊ทผํ ์ ์๋ค.
@app.task(bind=False)
@app.task(bind=False)
def debug_task():
print(f'Request: {self.request!r}') # Error ๋ฐ์
@app.task(bind=False
์์ bind=False
๋ Celery task ๋ฉ์๋๊ฐ self
๋ฅผ ์ธ์๋ก ๋ฐ์ง ์๋๋ก ํ๋ค.
์ฆ, task๊ฐ Celery task ์ธ์คํด์ค์ ๋ฐ์ธ๋ฉ ๋์ง ์๋๋ค๋ ์๋ฆฌ๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ self
์ ์ ๊ทผ์ด ๋ถ๊ฐ๋ฅํ๊ณ , ์ฐ์์ ์ผ๋ก Celery task ์ธ์คํด์ค์ ์์ฑ(self.request
, self.retry
๋ฑ)์ ์ ๊ทผ ๋ถ๊ฐ๋ฅํ๋ค.
๊ฒฐ๋ก
์ฆ, bind=True
์ bind=False
๋ ํฐ ์ฐจ์ด๋ฅผ ๋ณด์ด์ง๋ ์๋๋ค.
Celery task ์ธ์คํด์ค ์์ฑ์ ์ ๊ทผํ ํ์๊ฐ ์๋ค๋ฉด ๋ ๊ฒฝ์ฐ ๋ชจ๋ ํน๋ณํ ์๋ฌ์์ด ์ ์์ ์ผ๋ก ๋์ํ๋ค.
ํ์ง๋ง, Celry task ์ธ์คํด์ค ์์ฑ์ ์ ๊ทผํด์ผํ๋ ๊ฒฝ์ฐ๊ฐ ์๋ค๋ฉด ๋ฐ๋์ bind=True
๋ฅผ ์ค์ ํด์ฃผ๋๋ก ํ์.
๋๊ธ๋จ๊ธฐ๊ธฐ