J'ai une tâche dans Celery qui pourrait potentiellement durer 10 000 secondes tout en fonctionnant normalement. Cependant, tout le reste de mes tâches devrait être fait en moins d'une seconde. Comment puis-je définir une limite de temps pour la tâche en cours d'exécution intentionnellement longue sans modifier la limite de temps pour les tâches en cours d'exécution courtes?
Vous pouvez définir des limites de temps de tâche ( dur et/ou doux ) lors de la définition d'une tâche ou lors de l'appel.
from celery.exceptions import SoftTimeLimitExceeded
@celery.task(time_limit=20)
def mytask():
try:
return do_work()
except SoftTimeLimitExceeded:
cleanup_in_a_hurry()
ou
mytask.apply_async(args=[], kwargs={}, time_limit=30, soft_time_limit=10)
Ceci est un exemple avec décorateur pour une tâche spécifique et Celery 3.1.23 en utilisant 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