我想验证为芹菜任务设置时间限制是否有效。
我目前的配置看起来像这样:
CELERYD_TASK_SOFT_TIME_LIMIT = 30
CELERYD_TASK_TIME_LIMIT = 120
task_soft_time_limit = 29
task_time_limit = 44_LIMIT = 120
我正在重载超时参数,因为它似乎有name change coming,我只是想确保我至少达到一次超时。
但是当我在调试器中运行测试时,cellery app.conf
字典看起来像这样:
(Pdb) app.conf['task_time_limit'] == None
True
(Pdb) app.conf['task_soft_time_limit'] == None
True
(Pdb) app.conf['CELERYD_TASK_SOFT_TIME_LIMIT']
30
(Pdb) app.conf['CELERYD_TASK_TIME_LIMIT']
120
我写了一个测试,我相信会触发超时,但不会出现任何错误:
@app.task(soft_time_limit=15)
def time_out_task():
import time
count = 0
#import pdb; pdb.set_trace()
while count < 1000:
time.sleep(1)
count += 1
print(count)
我的问题如下:
谢谢
我通过改变测试方式和改变导入Celery配置的方式解决了这个问题。
最初,我通过导入Django设置对象来设置配置:
app = Celery('groot')
app.config_from_object('django.conf:settings', namespace='CELERY')
但这忽略了CELERYD_...
前缀的设置。因此我使用了新的表示法并调用了以下方法:
app.conf.update(
task_soft_time_limit=30,
task_time_limit=120,
)
我还在Django测试环境中测试了这一点,转而调整了一个实际的Celery工作者并将任务发送给了worker。如果有人提供了如何在单元测试中测试超时设置的解决方案,那将非常感激。
在django设置中,CELERY_TASK_TIME_LIMIT正在为我工作
CELERY_TASK_TIME_LIMIT = 60