2013-03-16 5 views
11

Ich verwende django-rq, um einige lang andauernde Aufgaben auf meiner Django-Site zu behandeln. Diese Aufgaben lösen das 180 Sekunden Timeout der (ich nehme an) rqworker:rqworker timeout

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

Wie kann ich diesen Timeout-Wert zu erhöhen? Ich habe versucht, --timeout 360 zum Befehl rqworker hinzuzufügen, aber das wird nicht erkannt.

In meinem Python-Code, meine langlaufende Arbeit über

 django_rq.enqueue(
      populate_trends, 
      self, 
     ) 

genannt wird und haben

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

, die ich im rq docs bemerkt, aber django-rq hat keine solche Methode scheint es, .

aktualisieren

Vorerst gegabelt ich django-rq und hat eine placeholder fix das Timeout zu erhöhen. Wahrscheinlich müssen Sie mit dem Projekt arbeiten, um eine längerfristige Lösung zu erhalten. Ich habe eine issue dort zu diskutieren begonnen.

Antwort

16

Dies scheint der richtige Weg zu sein, das Problem anzugehen.

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

Wenn Sie kwargs passieren müssen,

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

Dank der Selwin am django-rq Projekt für die Hilfe.

5

Ein Update: Sie können den Timeout-Parameter als Keyword-Argument an den @ Job Dekorator von Django-rq übergeben. Beachten Sie, dass Sie das Argument des Warteschlangennamens zuerst übergeben müssen.

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

Aus Gründen der Klarheit für die Menschen Funktionen mit Argumenten verwenden, können Sie das Timeout wie unten

string_to_print = "Hello World" 

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

für eine Funktion Argumente wie unter

Einnahme passieren
@job 
def print_input(to_print): 
    print "The input supplied is ", to_print