2013-03-16 48 views
11

Używam django-rq do obsługi niektórych długotrwałych zadań w mojej witrynie django. Te zadania wyłączają 180-sekundowy limit czasu (zakładam) rqworker:timeout rqworker

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

Jak mogę zwiększyć tę wartość limitu czasu? Próbowałem dodać -timeout 360 do polecenia rqworker, ale nie jest to rozpoznawane.

W moim kodu Pythona, moja długotrwała praca nazywa się poprzez

 django_rq.enqueue(
      populate_trends, 
      self, 
     ) 

i próbowali

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

które zauważyłem w rq docs ale django-RQ nie ma takiej metody to wydaje .

Aktualizacja

Na razie rozwidlony Django RQ i dodał placeholder fix zwiększyć limit czasu. Prawdopodobnie musisz pracować z projektem, aby uzyskać rozwiązanie długoterminowe. Założyłem tam issue do omówienia.

Odpowiedz

16

To wydaje się być właściwy sposób podejścia do problemu.

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

Jeśli trzeba przejść kwargs,

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

Dzięki selwin w projekcie django-rq za pomoc.

5

Aktualizacja: Możesz przekazać parametr timeout jako argument słowa kluczowego do dekoratora @job django-rq. Zauważ, że najpierw musisz przekazać argument nazwy kolejki.

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

Dla jasności dla osób korzystających z funkcji z argumentami, można przekazać timeout jak poniżej

string_to_print = "Hello World" 

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

dla funkcji biorąc argumenty jak poniżej

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