排队调用中的rq timeout参数不起作用,导致JobTimeoutException

2024-05-02 09:55:46 发布

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

我试图更改rq作业的超时,但似乎没有任何工作。我得到了一些效果:

my_queue = Queue('my_task', connection=Redis())

job_args = (1, 2, 4)

my_queue.enqueue_call(
                    my_func,
                    args=job_args,
                    timeout=2700
            )

但我还是

^{pr2}$

我太绝望了,我甚至试着进入rq模块队列.py并将timeout的默认参数更改为2700和default_timeout(在Queue类中定义的变量,其中包含enqueue_call方法)。是我遗漏了什么,还是有人知道这个问题?谢谢!在


Tags: redistaskqueuemy作业timeoutargsjob
2条回答

我们可以通过在队列初始化时设置超时来解决这个问题。在

from rq import Worker, Queue, Connection
q = Queue(default_timeout=3600)

希望这能解决你的疑问。在

排队调用中的超时参数没有问题。只是用这个例子来测试一下。在

在函数.py在

from time import sleep
def test(a, b, c):
    sleep(a)
    print str(b+c)

在驱动程序.py在

^{pr2}$

结果:

13:08:11 abc: test.test(100, 2, 3) (4b4e96e5-af30-4175-ab94-ceaf9187e581)
5
13:08:13 abc: test.test(300, 2, 3) (04605c34-d039-42ad-954e-7f445f0f8bc9)
13:11:17 JobTimeoutException: Job exceeded maximum timeout value (200 seconds)
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/rq/worker.py", line 568, in perform_job
    rv = job.perform()
  File "/usr/local/lib/python2.7/dist-packages/rq/job.py", line 495, in perform
    self._result = self.func(*self.args, **self.kwargs)
  File "./test.py", line 4, in test
    sleep(a)
  File "/usr/local/lib/python2.7/dist-packages/rq/timeouts.py", line 51, in handle_death_penalty
    'value ({0} seconds)'.format(self._timeout))
JobTimeoutException: Job exceeded maximum timeout value (200 seconds)
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/rq/worker.py", line 568, in perform_job
    rv = job.perform()
  File "/usr/local/lib/python2.7/dist-packages/rq/job.py", line 495, in perform
    self._result = self.func(*self.args, **self.kwargs)
  File "./test.py", line 4, in test
    sleep(a)
  File "/usr/local/lib/python2.7/dist-packages/rq/timeouts.py", line 51, in handle_death_penalty
    'value ({0} seconds)'.format(self._timeout))
JobTimeoutException: Job exceeded maximum timeout value (200 seconds)

如果您正在使用诸如supervisor之类的工具来管理rq工作人员,请尝试重新启动服务。在

相关问题 更多 >