2013-03-16 19 views
11

私はdjango-rqを使用して、私のdjangoサイトで長時間実行されるタスクを処理しています。これらのタスクは、(私が想定している)rqworkerの180秒タイムアウトをトリップします:rqworker timeout

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

どのようにしてこのタイムアウト値を増やすことができますか?私は--timeout 360をrqworkerコマンドに追加しようとしましたが、これは認識されません。私のPythonコードで

、私の長時間実行ジョブが

 django_rq.enqueue(
      populate_trends, 
      self, 
     ) 

経由で呼び出されると、私はrq docsに気づいたが、ジャンゴ-RQはそれはそうそのようなメソッドを持っていない

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

を試してみました。

更新

今の私はジャンゴ-RQフォークとタイムアウトを高めるためにplaceholder fixを追加しました。おそらく、長期的な解決策を得るためにプロジェクトと協力する必要があります。議論するためにそこにissueを開始しました。

答えて

16

これは問題にアプローチする正しい方法と思われます。

queue = django_rq.get_queue('default') 
queue.enqueue(populate_trends, args=(self,), timeout=500) 

あなたがkwargsからを渡す必要がある場合は、ヘルプのためのジャンゴ - RQのプロジェクトでselwinへ

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

感謝。

5

アップデート: キーワード引数としてtimeoutパラメータをdjango-rqの@jobデコレータに渡すことができます。最初にキュー名の引数を渡す必要があることに注意してください。引数を持つ関数を使用している人々のための明確化のために

@job("default", timeout=600) 
def long_running_task(): 
    ... 
0

、あなたは

@job 
def print_input(to_print): 
    print "The input supplied is ", to_print 
以下のような引数を取る関数にとして

string_to_print = "Hello World" 

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

下にタイムアウトを渡すことができます