web-dev-qa-db-fra.com

Quelle est la signification du mot-clé bind = True en céleri?

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)
17
Devang Padhiyar

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})
20
Tomáš Linhart

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

7
Yugandhar Chaudhari

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)
5
Devang Padhiyar