2012-07-26 22 views
30

Tengo una tarea en Apio que podría funcionar durante 10.000 segundos durante el funcionamiento normal. Sin embargo, el resto de mis tareas deberían hacerse en menos de un segundo. ¿Cómo puedo establecer un límite de tiempo para la tarea de ejecución intencionalmente larga sin cambiar el límite de tiempo en las tareas de ejecución corta?Establecer el límite de tiempo en una tarea específica con apio

Respuesta

44

Puede establecer límites de tiempo de tareas (hard y/o soft) al definir una tarea o durante una llamada.

from celery.exceptions import SoftTimeLimitExceeded 

@celery.task(time_limit=20) 
def mytask(): 
    try: 
     return do_work() 
    except SoftTimeLimitExceeded: 
     cleanup_in_a_hurry() 

o

mytask.apply_async(args=[], kwargs={}, time_limit=30, soft_time_limit=10) 
+0

nota que los argumentos de tiempo de espera/soft_timeout a apply_async solo está disponible en la versión de desarrollo de apio (rama principal, versión futura 3.1) – asksol

+10

También puede establecer límites de tiempo para una tarea en configuración usando: 'CELERY_ANNOTATIONS = {'module.mytask': {'time_limit': 20.0}}' – asksol

+6

Para apio versiones 3.1.x parece que los argumentos 'timeout/soft_timeout' para' apply_async' también han sido cambiado a 'time_limit/soft_time_limit'. El cambio relevante se introdujo aquí - https://github.com/celery/celery/commit/be6cef2e441e5ecf5857aeb77bd885f06128b9c9 – sanchitarora

5

Este es un ejemplo con decorador para una tarea específica y apio 3.1.23 usando soft_time_limit = 10000

@task(bind=True, default_retry_delay=30, max_retries=3, soft_time_limit=10000) 
def process_task(self, task_instance): 
    """Task processing.""" 
     pass 
+0

También puede asignar 'time_limit' como' @task (soft_time_limit = 10, time_limit = 15) ' –

Cuestiones relacionadas