rqworker超时
我在我的django网站上使用django-rq来处理一些需要很长时间才能完成的任务。这些任务会触发(我想是)rqworker的180秒超时限制。
JobTimeoutException: Job exceeded maximum timeout value (180 seconds).
我该如何增加这个超时值呢?我尝试在rqworker命令中添加--timeout 360,但这个命令没有被识别。
在我的python代码中,我的长时间运行的任务是通过
django_rq.enqueue(
populate_trends,
self,
)
来调用的,我还尝试过
django_rq.enqueue_call(
func=populate_trends,
args=(self,),
timeout=3600,
)
这个方法我在rq文档中看到过,但似乎django-rq没有这样的功能。
更新
目前我已经分叉了django-rq,并添加了一个占位符修复来增加超时。可能需要与项目合作,找到一个长期的解决方案。我在那儿开始了一个问题讨论。
4 个回答
3
使用 job_timeout
:
queue.enqueue(worker_func, *args, **kwargs, job_timeout=200)
正如 Stephen Blair 所指出的,timeout
这个参数在新版本的 rq 中已经不再有效:
queue.enqueue()
中的timeout
参数已经被弃用,取而代之的是job_timeout
。
https://github.com/rq/rq/blob/master/CHANGES.md#10-2019-04-06
而 job_timeout
的作用和之前的 timeout
是一样的。
9
更新一下:你可以把超时时间作为关键字参数传递给django-rq的@job装饰器。注意,你需要先传递队列名称这个参数。
@job("default", timeout=600)
def long_running_task():
...
31
这看起来是解决这个问题的正确方法。
queue = django_rq.get_queue('default')
queue.enqueue(populate_trends, args=(self,), timeout=500)
如果你需要传递关键字参数,
queue = django_rq.get_queue('default')
queue.enqueue(populate_trends, args=(self,), kwargs={'x': 1,}, timeout=500)
感谢django-rq项目中的selwin提供的帮助。