我有一个周期性的数据清除任务,每天运行一次。
我希望该任务仅运行1小时。如果处理该任务的持续时间超过1小时,请到期。它将在第二天再次运行1小时。
我想这样做,是因为如果流量很高,那么特定的CER任务会继续运行10-15小时。
我发现,最可靠的方法是首先在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()
有关更多详细信息,请参见芹菜设置文档。
然后,您在定义单个任务时覆盖soft_time_limit
和time_limit
,例如:
@shared_task(soft_time_limit=60, time_limit=70)
def mytask()
...
任务文档中还有更多细节。
您可以根据文档设置任务时间限制
如果要在特定任务上设置它,则可以使用 task_time_limit
或task_soft_time_limit
取决于您的使用特性