Quel est le sens de bind=True
en dessous céleri code? Quand l'utiliser et quand non?
@app.task(bind=True)
def send_Twitter_status(self, oauth, Tweet):
try:
Twitter = Twitter(oauth)
Twitter.update_status(Tweet)
except (Twitter.FailWhaleError, Twitter.LoginError) as exc:
raise self.retry(exc=exc)
Juste un petit ajout à d'autres réponses. Comme déjà indiqué, tâches liées ont accès à l'instance de tâche. Un cas d'utilisation lorsque cela est nécessaire sont les tentatives:
@celery.task(bind=True, max_retries=5)
def retrying(self):
try:
return 1/0
except Exception:
self.retry(countdown=5)
Un autre cas d'utilisation est lorsque vous souhaitez définir états personnalisés pour vos tâches et pouvoir le définir pendant l'exécution de la tâche:
@celery.task(bind=True)
def show_progress(self, n):
for i in range(n):
self.update_state(state='PROGRESS', meta={'current': i, 'total': n})
L'argument bind signifie que la fonction sera une "méthode liée" afin que vous puissiez accéder aux attributs et aux méthodes sur l'instance de type de tâche.
Voir les docs
Tâches liées
Une tâche étant liée signifie que le premier argument de la tâche sera toujours l'instance de tâche (self), tout comme Méthodes liées à Python :
logger = get_task_logger(__name__)
@task(bind=True)
def add(self, x, y):
logger.info(self.request.id)