¿Cuál es el significado de bind=True en el siguiente código de apio ? ¿Cuándo usarlo y cuándo no?
@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)El argumento de vinculación significa que la función será un "método vinculado" para que pueda acceder a los atributos y métodos en la instancia del tipo de tarea.
ver los documentos
Tareas enlazadas
Una tarea vinculada significa que el primer argumento de la tarea siempre será la instancia de la tarea (auto), al igual que los métodos vinculados de Python :
logger = get_task_logger(__name__) @task(bind=True) def add(self, x, y): logger.info(self.request.id)Solo una pequeña adición a otras respuestas. Como ya se indicó,las tareas vinculadas tienen acceso a la instancia de la tarea. Un caso de uso cuando esto es necesario son los reintentos:
@celery.task(bind=True, max_retries=5) def retrying(self): try: return 1/0 except Exception: self.retry(countdown=5)Otro caso de uso es cuando desea definir estados personalizados para sus tareas y poder configurarlo durante la ejecución de la tarea:
@celery.task(bind=True) def show_progress(self, n): for i in range(n): self.update_state(state='PROGRESS', meta={'current': i, 'total': n})