运行 celery 周期性任务 1 小时,它需要超过 1 小时,使该任务过期?
Run celery periodic task for 1 hour, it it takes more then 1 hour, expire that task?
我有一个周期性的数据清除任务,每天 运行 一次。
我希望该任务只 运行 1 小时。如果处理该任务的持续时间超过 1 小时,则使该任务过期。它会在第二天再次 运行 持续 1 小时。
我想这样做是因为如果流量很高,那么该特定的 cerely 任务会持续 运行ning 10-15 小时。
您可以根据documentation
设置任务时限
如果你打算在特定任务上设置它,你可以使用
task_time_limit
or task_soft_time_limit
取决于你的使用特点
我发现最可靠的方法是首先在 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 中有更多详细信息。
我有一个周期性的数据清除任务,每天 运行 一次。
我希望该任务只 运行 1 小时。如果处理该任务的持续时间超过 1 小时,则使该任务过期。它会在第二天再次 运行 持续 1 小时。
我想这样做是因为如果流量很高,那么该特定的 cerely 任务会持续 运行ning 10-15 小时。
您可以根据documentation
设置任务时限如果你打算在特定任务上设置它,你可以使用
task_time_limit
or task_soft_time_limit
取决于你的使用特点
我发现最可靠的方法是首先在 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 中有更多详细信息。