运行芹菜周期性任务1小时,需要超过1小时,这个任务到期了吗?

时间:2018-04-23 14:46:58

标签: python django celery celery-task celerybeat

我有一个定期的数据清除任务,每天运行一次。

我希望该任务仅运行1小时。如果处理该任务的持续时间超过1小时,则该任务到期。它将在第二天再次运行1小时。

我想这样做是因为如果流量很高那么特定的任务就会持续运行10-15个小时。

2 个答案:

答案 0 :(得分:3)

您可以按documentation

设置任务时间限制

如果您要将其设置为特定任务,则可以使用 task_time_limittask_soft_time_limit取决于您的使用特征

答案 1 :(得分:1)

我发现最可靠的方法是首先在settings.py中设置全局限制,其值为int秒:

 CELERY_TASK_SOFT_TIME_LIMIT = 3540
 CELERY_TASK_TIME_LIMIT = 3600

然后,您可以在硬限制命中之前捕获软时间限制异常并清理任务:

from celery.exceptions import SoftTimeLimitExceeded

@shared_task
def mytask():
    try:
        return do_work()
    except SoftTimeLimitExceeded:
        cleanup_in_a_hurry()

有关详细信息,请参阅celery settings docs

然后在定义单个任务时覆盖soft_time_limittime_limit,例如:

@shared_task(soft_time_limit=60, time_limit=70)
def mytask()
    ...

task docs中有更多详情。