๐ [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 ๋ฅผ ์ค์ ํด์ฃผ๋๋ก ํ์.
๋๊ธ๋จ๊ธฐ๊ธฐ