使用django的芹菜很难超时

时间:2012-07-02 19:59:41

标签: django celery

基于这个问题:

Django Celery Time Limit Exceeded?

我有一些任务可能会运行一段时间。但是,大多数任务不应该花费超过几秒钟。我不想将全局超时设置为考虑那些长时间运行的任务。相反,我希望有一个简短的全局硬时限,并手动调整我需要更长时间超时的任务。

当用@task装饰任务时,我做了@task(超时=无)但是,该任务仍然达到300秒的超时。我用task_function.delay(args)调用了这个任务。

有没有办法调用任务并自定义它的超时?

2 个答案:

答案 0 :(得分:3)

This issue解决了您可以使用自定义超时调用任务的情况。它在issue802 branch中实现,但尚未掌握。您可以将其与master合并并使用所需的功能。

使用此补丁,您可以在调用任务时传递超时。

  

tasks.add.apply_async(args = [1,2],soft_timeout = 2,timeout = 5)

答案 1 :(得分:2)

你在运行什么版本的芹菜? current stable docs列表time_limit作为设置任务超时的正确参数,如果没有提供时间限制,将使用工作者默认值。要为您可以使用的任务设置长时间(例如60分钟)超时:

@task(time_limit=3600)
def mytask():
    ...

或者,您可以使用apply_async更改调用任务时的时间限制:

mytask.apply_async(time_limit=3600, args=args)