2013-03-16 13 views
11

Sto usando django-rq per gestire alcune attività di lunga durata sul mio sito django. Questi compiti scattano il 180 secondo timeout del (presumo) rqworker:timeout rqworker

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

Come posso aumentare questo valore di timeout? Ho provato ad aggiungere --timeout 360 al comando rqworker ma questo non è riconosciuto.

Nel mio codice Python, il mio lavoro a lungo in esecuzione viene richiamata tramite

 django_rq.enqueue(
      populate_trends, 
      self, 
     ) 

e hanno cercato

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

che ho notato nel rq docs ma Django-RQ non ha tale metodo sembra .

Aggiornamento

Per ora mi biforcuta django-RQ e ha aggiunto un placeholder fix per aumentare il timeout. Probabilmente è necessario lavorare con il progetto per ottenere una soluzione a lungo termine. Ho iniziato un issue lì per discutere.

risposta

16

Questo sembra essere il modo giusto per affrontare il problema.

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

Se è necessario passare kwargs,

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

Grazie alla Selwin al progetto django-RQ per l'aiuto.

5

Un aggiornamento: È possibile passare il parametro di timeout come argomento parola chiave al decoratore @job di django-rq. Si noti che è necessario passare prima l'argomento del nome della coda.

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

Per chiarezza per le persone che utilizzano le funzioni con argomenti, è possibile passare il timeout, come di seguito

string_to_print = "Hello World" 

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

per una funzione di prendere argomenti come qui di seguito

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