Celery任务中的softtimeout和timeout无效

5 投票
1 回答
2441 浏览
提问于 2025-04-18 18:09

我有一个任务,平均需要20秒来完成。我想为这个任务设置软超时和硬超时。我是这样定义的:

@app.task(ignore_result=True, timeout=100, soft_timeout=50)
def MYTASK(SOMEPARAMS):
     # MYTASK

但是这个设置并没有真正起作用。我用这些参数进行测试:

@app.task(ignore_result=True, timeout=1, soft_timeout=1)
def MYTASK(SOMEPARAMS):
     # MYTASK

可是我的任务运行得很正常,花费的时间超过了1秒,而它本不应该完成。

那么,为什么超时没有起作用呢?

编辑:当我在日志中使用1秒的超时时,我看到的打印信息是这样的:

[2014-08-22 12:51:00,003: INFO/MainProcess] Task MYTASK[56002e72-a093-46c6-86cd-4c7b7e6ea7c3] succeeded in 15.549023876s: None

1 个回答

4

使用 time_limitsoft_time_limit 这两个参数:

@task(time_limit=2, soft_time_limit=1)
def mytask():
    pass

另外需要注意的是:

时间限制目前在Windows和其他不支持SIGUSR1信号的平台上是无法使用的。

撰写回答