2013-02-27 23 views
15

Nella documentazione per celeryd-multi, troviamo questo esempio:In sedano, quale sarebbe lo scopo di far lavorare più persone alla stessa coda?

# Advanced example starting 10 workers in the background: 
# * Three of the workers processes the images and video queue 
# * Two of the workers processes the data queue with loglevel DEBUG 
# * the rest processes the default' queue. 
$ celeryd-multi start 10 -l INFO -Q:1-3 images,video -Q:4,5 data 
    -Q default -L:4,5 DEBUG 

(Da qui: http://docs.celeryproject.org/en/latest/reference/celery.bin.celeryd_multi.html#examples)

Quale potrebbe essere un esempio pratico del perché sarebbe bene avere più di un lavoratore su un singolo host processa la stessa coda, come nell'esempio sopra? Non è questo il motivo per cui è impostata la concorrenza?

Più specificamente, ci sarebbe alcuna differenza pratica tra le seguenti due linee (A e B) ?:

A:

$ celeryd-multi start 10 -c 2 -Q data 

B:

$ celeryd-multi start 1 -c 20 -Q data 

mi riguarda che mi manca un po 'di conoscenza preziosa sulle code dei compiti perché non capisco questa differenza pratica e sarei molto grato se qualcuno potesse illuminarmi.

Grazie!

risposta

8

Quale potrebbe essere un esempio pratico del perché sarebbe bene avere più di un lavoratore su un singolo processo host la stessa coda, come nel precedente esempio ?

Risposta:

Quindi, si consiglia di eseguire più istanze dei lavoratori sullo stesso nodo della macchina se:

  • Stai usando la piscina multiprocessing e vogliono consumare messaggi in parallelo. Alcuni riportano prestazioni migliori utilizzando più istanze di operatore invece di eseguire una singola istanza con molti pool di lavoratori .

  • Si sta utilizzando l'eventlet/gevent (e il famigerato GIL, anche il "thread") pool) e si desidera eseguire attività su più CPU core.

Riferimento: http://www.quora.com/Celery-distributed-task-queue/What-is-the-difference-between-workers-and-processes