Estoy tratando de entender cómo funciona el apio.
En mi aplicación django en el archivo tasks.py he creado una tarea:
@celery.shared_task(default_retry_delay=2 * 60, max_retries=2) def my_task(param1, param2): # There are some operationsLlamo a esta tarea usando este código:
my_task.delay(param1, param2) Dentro de esta my_task hay una condición en la que esta tarea debe iniciarse nuevamente, pero después de un retraso de un minuto.
Descubrí que hay algún tipo de ETA y cuenta regresiva para las tareas, pero sus ejemplos son solo con apply_async
¿Es posible usar algún tipo de cuenta regresiva para el delay ?
De la parte básica del apio Documentación de llamadas.
delay(*args, **kwargs)Acceso directo para enviar un mensaje de tarea, pero no admite opciones de ejecución .
Por lo tanto, la demora es claramente conveniente, pero si desea establecer opciones de ejecución adicionales, debe usar apply_async .
Como la documentación indica que la delay no se puede usar con opciones adicionales configuradas, solo debe convertir su llamada en apply_async
Si desea agregar opciones de ejecución, los documentos sugieren que use una firma. p.ej:
my_task.s(arg1, arg2).apply_async(countdown=60)Solo para agregar a la respuesta de iklinac. Así es como llamarías a la tarea usando apply_async()
my_task.apply_async(args=(param1, param2), countdown=60)o
my_task.apply_async(kwargs={'param1':param1, 'param2':param2}, countdown=60)La segunda opción será realmente útil si está utilizando una herramienta como Flower para monitorear. Puede consultar la página de mejores prácticas de tareas de apio para obtener otros consejos.