Menjalankan banyak pekerja menggunakan Seledri

11

Saya perlu membaca dari Rabbitmq dan menjalankan tugas secara paralel menggunakan Seledri dalam satu sistem.

[2014-12-30 15:54:22,374: INFO/Worker-1] ...   
[2014-12-30 15:54:23,401: INFO/Worker-1] ...
[2014-12-30 15:54:30,878: INFO/Worker-1] ...
[2014-12-30 15:54:32,209: INFO/Worker-1] ...
[2014-12-30 15:54:33,255: INFO/Worker-1] ...
[2014-12-30 15:54:48,445: INFO/Worker-1] ...
[2014-12-30 15:54:49,811: INFO/Worker-1] ...
[2014-12-30 15:54:50,903: INFO/Worker-1] ...
[2014-12-30 15:55:39,674: INFO/Worker-1] ...
[2014-12-30 15:55:41,024: INFO/Worker-1] ...
[2014-12-30 15:55:42,147: INFO/Worker-1] ...

Kelihatannya hanya 1 pekerja berjalan sepanjang waktu .. yaitu satu demi satu secara berurutan. Bagaimana saya bisa mengkonfigurasi Selery untuk menjalankan beberapa pekerja untuk menjalankan paralel?

SrC
sumber

Jawaban:

17

Saya sekarang telah memperbarui jawaban saya mengikuti komentar dari MartinP tentang pekerja proses melahirkan anak bukan utas:

Seledri workerdan worker processesberbagai hal berbeda ( Baca ini untuk referensi ).

Ketika seorang pekerja dimulai maka akan melahirkan sejumlah proses anak.

Jumlah default dari proses-proses tersebut sama dengan jumlah core pada mesin itu.

Di Linux Anda dapat memeriksa jumlah core melalui:

$ nproc --all

Kalau tidak, Anda dapat menentukan sendiri, misalnya:

$ celery -A proj worker --loglevel=INFO --concurrency=2

Dalam contoh di atas ada satu pekerja yang akan dapat menelurkan 2 proses anak. Biasanya disarankan untuk menjalankan satu pekerja per mesin dan nilai konkurensi akan menentukan berapa banyak proses yang akan berjalan secara paralel, tetapi jika beberapa pekerja diminta untuk menjalankan maka Anda dapat memulainya seperti yang ditunjukkan di bawah ini:

$ celery -A proj worker -l info --concurrency=4 -n wkr1@hostname
$ celery -A proj worker -l info --concurrency=2 -n wkr2@hostname
$ celery -A proj worker -l info --concurrency=2 -n wkr3@hostname

Rujuk ke dokumen seledri untuk info lebih lanjut

elnurcoot
sumber
3
parameter concurency tidak menjalankan utas. Ini menjalankan proses anak secara default sehingga memproses tugas secara paralel - docs.celeryproject.org/en/latest/reference/…
MartinP
Bagaimana konkurensi dan utas saling berhubungan, jika konkurensi default adalah jumlah inti mesin, berapakah jumlah utas? Apakah bisa dikonfigurasi?
Thomas John
@ ThomasJohn Saya pikir nomor default untuk utas masih merupakan jumlah inti dari mesin. Secara umum, Anda ingin mengatur flag --concurrency tinggi untuk pekerja berbasis thread.
FragLegs
0

Saya telah menemukan ini

http://docs.celeryproject.org/en/latest/reference/celery.html?highlight=parallel

Anda dapat mencari kanvas primitif di sana Anda dapat melihat bagaimana membuat grup untuk eksekusi paralel.

class celery.group (task1 [, task2 [, task3 [, ... taskN]]]) Membuat grup tugas yang akan dieksekusi secara paralel.

Kalau tidak, cara yang baik adalah pergi ke saluran IRC dan mengajukan pertanyaan khusus itu. Biasanya ada orang yang tahu itu sangat baik dan mereka dapat membantu Anda.

René Höhle
sumber
0

Sepertinya pekerja Anda hanya menjalankan satu proses / utas. Anda mungkin hanya perlu menambahkan argumen --concurrencyatau-c ketika memulai pekerja untuk menelurkan beberapa contoh pekerja (paralel).

celery -A proj worker -c 4
Jamie B
sumber