我有一个定期的数据清除任务,每天运行一次。
我希望该任务仅运行1小时。如果处理该任务的持续时间超过1小时,则该任务到期。它将在第二天再次运行1小时。
我想这样做是因为如果流量很高那么特定的任务就会持续运行10-15个小时。
答案 0 :(得分:3)
您可以按documentation
设置任务时间限制如果您要将其设置为特定任务,则可以使用
task_time_limit
或task_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_limit
和time_limit
,例如:
@shared_task(soft_time_limit=60, time_limit=70)
def mytask()
...
task docs中有更多详情。