工作时间

2024-06-05 23:44:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用django rq处理我的django站点上的一些长时间运行的任务。这些任务触发(我假设)rqworker的180秒超时:

JobTimeoutException: Job exceeded maximum timeout value (180 seconds).

如何增加此超时值?我试过在rqworker命令中添加--timeout 360,但无法识别。

在我的python代码中,我的长时间运行的作业称为via

        django_rq.enqueue(
            populate_trends,
            self,
        )

并尝试过

        django_rq.enqueue_call(
            func=populate_trends,
            args=(self,),
            timeout=3600,
        )

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

更新

现在我分叉django rq并添加了一个placeholder fix来增加超时。可能需要与项目合作,以获得一个长期的解决方案。我已经开始在那里讨论了。


Tags: djangoself站点valuetimeoutjobrqseconds
1条回答
网友
1楼 · 发布于 2024-06-05 23:44:42

更新: 可以将timeout参数作为关键字参数传递给django rq的@job decorator。请注意,必须先传递queue name参数。

@job("default", timeout=600)
def long_running_task():
    ...
网友
2楼 · 发布于 2024-06-05 23:44:42

为了让使用带参数的函数的人更清楚,可以通过如下超时

 string_to_print = "Hello World"

 queue = django_rq.get_queue('default')
 queue.enqueue(print_input, to_print=string_to_print, timeout=600)      

对于接受如下参数的函数

 @job
 def print_input(to_print):
     print "The input supplied is ", to_print
网友
3楼 · 发布于 2024-06-05 23:44:42

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

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项目中的帮助。

相关问题 更多 >