2016-04-27 2 views
1

rqジョブでタイムアウトを変更しようとしていますが、何も動作しないようです。私はの効果に何かを持っている:エンキューコールのrqタイムアウトパラメータが機能しない、JobTimeoutExceptionを返す

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

job_args = (1, 2, 4) 

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

が、私はまだ

JobTimeoutException: Job exceeded maximum timeout value (180 seconds) 

私は、私もRQモジュールqueue.pyに入ると変えてみましたので、必死持っを取得していますタイムアウトのデフォルト引数は2700に、DEFAULT_TIMEOUT(Queueクラスに定義された変数(enqueue_callメソッドを含む))。私は何かを逃しているのですか、それとも誰かが知っている問題がありますか?ありがとう!

答えて

1

enqueue_callのタイムアウト引数に問題はありません。この例でテストしました。

function.py

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

driver.py

from redis import Redis 
from rq import Queue 
from function import test 

q = Queue('abc', connection=Redis()) 

q.enqueue_call(test, args=(300, 2, 3), timeout=200) 
q.enqueue_call(test, args=(100, 2, 3), timeout=200) 

結果:あなたはRQの労働者を管理するスーパーバイザーのようなツールを使用している場合

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) 

、サービスを再起動してみてください。

+0

私はサービスを再開しましたが、私はまだ同じ問題を抱えています。 –

+0

コードを見ずにデコードするのは難しいです。あなたは@仕事デコレータを使用してみることができます。 [docs](http://python-rq.org/docs/) – Himavanth

2

キュー初期化でタイムアウトを設定することでこれに対処できます。

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

希望すると、あなたの質問が解決します。

関連する問題