У меня есть задача в сельдере, которая может работать в течение 10 000 секунд при нормальной работе. Однако все остальные мои задачи должны выполняться менее чем за одну секунду. Как установить ограничение по времени для преднамеренно длительной задачи без изменения сроков выполнения коротких задач?
Установка ограничения времени на конкретную задачу с сельдереем
Ответ 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