两种配置
- task_time_limit:10s,如果10s内没有执行结束,那么这个task就会被杀掉,并且继续执行新的task
- task_soft_time_limit:10s,如果10s内没有执行结束,那么这个task也会被杀掉,但可以捕获到异常,并处理,如下
from celery.exceptions import SoftTimeLimitExceeded
@app.task
def mytask():
try:
return do_work()
except SoftTimeLimitExceeded:
cleanup_in_a_hurry()
配置
在配置文件中
celery4.X版本
CELERYD_TASK_SOFT_TIME_LIMIT 或 CELERYD_TASK_TIME_LIMIT
task_soft_time_limit 或 task_time_limit
celery5.X版本
CELERYD_SOFT_TIME_LIMIT 或 CELERYD_TIME_LIMIT
task_soft_time_limit 或 task_time_limit
在任务上添加
@app.task(soft_time_limit=5)
def mytask():
pass
启动命令
celery -A app worker -l info --soft-time-limit=10
配置优先级
装饰器 > config配置 > 队列启动命令