我在Celery中有一项任务,在正常运行时可能会运行10,000秒。但是,我的所有其余任务都应该在不到一秒的时间内完成。如何在不改变短期运行任务的时间限制的情况下为故意长时间运行的任务设置时间限制?
答案 0 :(得分:57)
您可以在定义任务或调用时设置任务时间限制(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)
答案 1 :(得分:9)
这是使用 soft_time_limit = 10000
的特定任务和Celery 3.1.23的装饰器的示例@task(bind=True, default_retry_delay=30, max_retries=3, soft_time_limit=10000)
def process_task(self, task_instance):
"""Task processing."""
pass