2013-03-16 108 views
11

我正在使用django-rq來處理我的django網站上的一些長時間運行的任務。這些任務跳過(我認爲)rqworker的180秒超時:rqworker timeout

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

如何增加超時值?我已經嘗試在rqworker命令中添加--timeout 360,但這不被識別。

在我的Python代碼,我的長期運行的作業通過

 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增加超時。可能需要與該項目合作以獲得更長期的解決方案。我已經開始在那裏討論issue

回答

16

這似乎是解決問題的正確方法。

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

如果你需要傳遞kwargs,

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

感謝在您的幫助Django的-RQ項目塞爾溫。

5

更新: 您可以將timeout參數作爲關鍵字參數傳遞給django-rq的@job裝飾器。請注意,您必須先傳遞隊列名稱參數。

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

爲了清楚起見,使用功能與參數的人,你也可以傳遞超時如下

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