Just a small addition to other answers. As already stated, bound tasks have access to the task instance. One use case when this is needed are retries:
@celery.task(bind=True, max_retries=5)
def retrying(self):
try:
return 1/0
except Exception:
self.retry(countdown=5)
Another use case is when you want to define custom states for your tasks and be able to set it during task execution:
@celery.task(bind=True)
def show_progress(self, n):
for i in range(n):
self.update_state(state='PROGRESS', meta={'current': i, 'total': n})
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…