2014-07-01 21 views
12

Alcune delle attività del mio codice richiedevano più tempo e più tempo per essere eseguite.Celery: operaio con attività simultanee e riservate che esegue solo attività 1

Dopo l'ispezione, ho notato che sebbene il mio nodo di lavoro sia impostato su Concurrency 6, e 6 processi esistano per "lavoro", ma solo 1 attività viene mostrata in "attività in esecuzione". Ecco un po 'la prova visiva:

Qui ci sono le opzioni di lavoratore:

The worker options, as seen by flower

E qui è la scheda compito per il lavoratore con le procedure solo 1 in esecuzione:

enter image description here

Ho scoperto che se riavvio il sedano, la concorrenza è ancora una volta rispettata e vedrò> 1 attività in esecuzione, ma dopo una certa quantità di tempo/attività si ritorna a questo comportamento ..

Qualche idea per risolvere questo problema intermittente?

+0

che ho incontrato lo stesso problema su Heroku. Durante un'attività a lungo termine, tutti gli altri lavoratori non accettano nuove attività. Hai avuto fortuna con questo? – odedfos

+1

Stai riscontrando questo bug? https://github.com/celery/celery/issues/1845 – Buttons840

+0

Hi Buttons840, non posso esserne sicuro dopo aver appena dato un'occhiata a quel problema, ma sembra che ci sia molto di simile. La mia squadra terrà d'occhio quel problema e vedrà se la sua risoluzione risolve i nostri problemi (e se possiamo evitare di usare l'opzione '-Ofair'). Buona scoperta! –

risposta

17

Non sono sicuro che sia il tuo caso d'uso, ma ho riscontrato problemi simili quando avevo un mix di attività lunghe e brevi. In sostanza, ciò che è accaduto è che a un certo punto un processo potrebbe avviare un'attività a lunga durata, mentre preleva alcune altre attività, impedendo che vengano utilizzate da altri processi. Quindi ho disabilitato il prefetching, che è utile solo se stai facendo un sacco di attività brevi.

Per disabilitare il prefetch, è necessario sedano 3.1+ e la Ofair setting, per esempio:

celery -A proj worker -l info -Ofair 
+3

Anche con il problema di precaricamento, le nuove attività non devono essere gestite correttamente dagli altri processi poiché le attività non sono state precaricate? – odedfos

+0

Ci scusiamo per il lungo ritardo nel rispondere a questa domanda. Segnalo come la risposta perché sembra, almeno per ora, aver risolto il problema. Il mio numero di attività in esecuzione è più vicino al limite di concorrenza ora, ma devo ancora provarlo su scala più ampia. –

+0

Wow Sono sorpreso che il sedano prelevi i compiti ... Voglio dire che il guadagno in termini di prestazioni è marginale rispetto a il mal di testa è la causa quando le attività non vengono avviate immediatamente perché sono già state recuperate da quel particolare operatore e qualcosa che sta eseguendo ora richiede del tempo !!! –

Problemi correlati