rqworker超时

Eri*_*rik 16 python django redis

我正在使用django-rq来处理我的django站点上的一些长时间运行的任务.这些任务会导致(我假设)rqworker的180秒超时:

JobTimeoutException: Job exceeded maximum timeout value (180 seconds).
Run Code Online (Sandbox Code Playgroud)

如何增加此超时值?我已经尝试将--timeout 360添加到rqworker命令但是无法识别.

在我的python代码中,我的长期工作被调用

        django_rq.enqueue(
            populate_trends,
            self,
        )
Run Code Online (Sandbox Code Playgroud)

并尝试过

        django_rq.enqueue_call(
            func=populate_trends,
            args=(self,),
            timeout=3600,
        )
Run Code Online (Sandbox Code Playgroud)

我在rq docs中注意到但django-rq似乎没有这样的方法.

更新

现在我分叉了django-rq并添加了一个占位符修复来增加超时.可能需要与项目合作才能获得更长期的解决方案.我在那里开始讨论一个问题.

Eri*_*rik 23

这似乎是解决问题的正确方法.

queue = django_rq.get_queue('default')
queue.enqueue(populate_trends, args=(self,), timeout=500) 
Run Code Online (Sandbox Code Playgroud)

如果你需要通过kwargs,

queue = django_rq.get_queue('default')
queue.enqueue(populate_trends, args=(self,), kwargs={'x': 1,}, timeout=500) 
Run Code Online (Sandbox Code Playgroud)

感谢django-rq项目中的selwin提供的帮助.

  • 如果您使用的是 RQ 1.0 (2019-04-06) 或更高版本,请使用 **job_timeout** 而不是 **timeout**![RQ 变更日志](https://github.com/rq/rq/blob/master/CHANGES.md#10-2019-04-06) (5认同)

dim*_*myG 5

更新:您可以将timeout参数作为关键字参数传递给django-rq的@job装饰器.请注意,您必须先传递队列名称参数.

@job("default", timeout=600)
def long_running_task():
    ...
Run Code Online (Sandbox Code Playgroud)