Подтвердить что ты не робот

Установка ограничения времени на конкретную задачу с сельдереем

У меня есть задача в сельдере, которая может работать в течение 10 000 секунд при нормальной работе. Однако все остальные мои задачи должны выполняться менее чем за одну секунду. Как установить ограничение по времени для преднамеренно длительной задачи без изменения сроков выполнения коротких задач?

4b9b3361

Ответ 1

Вы можете установить временные рамки задачи (hard и/или soft) при определении задачи или при вызове.

from celery.exceptions import SoftTimeLimitExceeded

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

или

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

Ответ 2

Это пример с декоратором для конкретной задачи и сельдерея 3.1.23 с использованием 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