ใช้แรงงานหลายคนโดยใช้ผักชีฝรั่ง


11

ฉันต้องอ่านจาก Rabbitmq และดำเนินงานแบบขนานโดยใช้ Celery ในระบบเดียว

[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] ...

มันตะเข็บเพียงคนงาน 1 คนที่ทำงานอยู่ตลอดเวลา .. คือคนทีอยู่ในลำดับ ฉันจะกำหนดค่า Celery เพื่อให้ผู้ใช้หลายคนทำงานแบบขนานได้อย่างไร

คำตอบ:


17

ฉันได้อัปเดตคำตอบของฉันต่อไปนี้ความคิดเห็นจาก MartinP เกี่ยวกับผู้ปฏิบัติงานการวางไข่ของเด็กกระบวนการไม่กระทู้

คื่นฉ่ายworkerและworker processesเป็นสิ่งที่แตกต่าง ( อ่านนี้สำหรับการอ้างอิง )

เมื่อผู้ปฏิบัติงานเริ่มทำงานมันจะสร้างกระบวนการลูกจำนวนหนึ่ง

หมายเลขเริ่มต้นของกระบวนการเหล่านั้นจะเท่ากับจำนวนแกนในเครื่องนั้น

บน Linux คุณสามารถตรวจสอบจำนวนคอร์ผ่าน:

$ nproc --all

มิฉะนั้นคุณสามารถระบุได้ด้วยตนเองเช่น:

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

ในตัวอย่างด้านบนมีผู้ปฏิบัติงานหนึ่งคนที่จะสามารถวางกระบวนการเด็ก 2 กระบวนการได้ โดยทั่วไปจะแนะนำให้เรียกใช้งานคนเดียวต่อเครื่องและค่าการทำงานพร้อมกันจะกำหนดจำนวนกระบวนการที่จะทำงานในแบบคู่ขนาน แต่หากพนักงานหลายคนจำเป็นต้องเรียกใช้จากนั้นคุณสามารถเริ่มพวกเขาเช่นที่แสดงด้านล่าง:

$ 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

อ้างถึงเอกสารผักชีฝรั่งสำหรับข้อมูลเพิ่มเติม


3
พารามิเตอร์ที่เกี่ยวข้องไม่ได้รันเธรด เรียกใช้การประมวลผลลูกโดยค่าเริ่มต้นดังนั้นจึงประมวลผลงานแบบขนาน - docs.celeryproject.org/en/latest/reference/ …
MartinP

การเกิดพร้อมกันและเธรดเกี่ยวข้องกันอย่างไรถ้าการเกิดพร้อมกันเริ่มต้นคือจำนวนแกนของเครื่องสิ่งที่จะเป็นจำนวนเธรด? สามารถกำหนดค่าได้หรือไม่?
โทมัสจอห์

@ThomasJohn ฉันคิดว่าหมายเลขเริ่มต้นสำหรับเธรดยังคงเป็นจำนวนคอร์ของเครื่อง โดยทั่วไปคุณจะต้องตั้งค่าสถานะ --concurrency สูงสำหรับพนักงานที่ทำงานกับเธรด
FragLegs

0

ฉันได้พบสิ่งนี้แล้ว

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

คุณสามารถมองหาภาพดั้งเดิมของ Canvas ที่นั่นคุณสามารถดูวิธีการสร้างกลุ่มสำหรับการประมวลผลแบบขนาน

class celery.group (task1 [, task2 [, task3 [, … taskN]])) สร้างกลุ่มของงานที่ต้องดำเนินการแบบขนาน

มิฉะนั้นวิธีที่ดีคือไปที่ช่อง IRC และถามคำถามพิเศษนั้น โดยปกติมีคนที่รู้ว่าดีมากและพวกเขาสามารถช่วยคุณได้


0

ดูเหมือนว่าพนักงานของคุณกำลังเรียกใช้กระบวนการ / เธรดเดียว คุณอาจต้องเพิ่ม--concurrencyหรือ-cโต้แย้งเมื่อเริ่มต้นผู้ปฏิบัติงานเพื่อวางไข่อินสแตนซ์ของผู้ทำงานหลายคน (ขนาน)

celery -A proj worker -c 4
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.