Chạy nhiều công nhân sử dụng Celery


11

Tôi cần đọc từ Rabbitmq và thực thi nhiệm vụ song song bằng cách sử dụng Celery trong một hệ thống.

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

Nó chỉ có 1 công nhân đang chạy mọi lúc .. tức là lần lượt từng người theo thứ tự. Làm cách nào tôi có thể định cấu hình Celery để chạy nhiều công nhân để chạy song song?

Câu trả lời:


17

Bây giờ tôi đã cập nhật câu trả lời của mình sau nhận xét từ MartinP về việc nhân viên sinh ra các quy trình con không phải là chủ đề:

Cần tây workerworker processeslà những thứ khác nhau ( Đọc này để tham khảo ).

Khi một công nhân được bắt đầu, nó sẽ sinh ra một số quy trình con nhất định.

Số lượng mặc định của các quá trình đó bằng với một số lõi trên máy đó.

Trên Linux, bạn có thể kiểm tra số lượng lõi thông qua:

$ nproc --all

Nếu không, bạn có thể tự chỉ định nó, ví dụ:

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

Trong ví dụ trên, có một công nhân sẽ có thể sinh ra 2 tiến trình con. Thông thường nên chạy một công nhân trên mỗi máy và giá trị đồng thời sẽ xác định có bao nhiêu quy trình sẽ chạy song song, nhưng nếu nhiều công nhân bắt buộc phải chạy thì bạn có thể khởi động chúng như hiển thị bên dưới:

$ 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

Tham khảo tài liệu cần tây để biết thêm


3
tham số đồng thời không chạy chủ đề. Nó chạy tiến trình con theo mặc định vì nó xử lý các tác vụ song song - docs.celeryproject.org/en/latest/reference/...
MartinP

Làm thế nào để đồng thời và các chủ đề liên quan với nhau, nếu đồng thời mặc định là số lượng lõi của máy, số lượng chủ đề sẽ là gì? Có cấu hình không?
Thomas John

@ThomasJohn Tôi nghĩ số mặc định cho chủ đề vẫn là số lõi của máy. Nói chung, bạn sẽ muốn đặt cờ --concurrency cao cho công nhân dựa trên luồng.
FragLegs

0

Tôi đã tìm thấy cái này

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

Bạn có thể tìm kiếm các nguyên hàm Canvas ở đó bạn có thể xem cách tạo các nhóm để thực hiện song song.

class celery.group (task1 [, task2 [, task3 [, tầm taskN]]]) Tạo một nhóm các nhiệm vụ được thực hiện song song.

Nếu không, một cách tốt là đi đến kênh IRC và hỏi những câu hỏi đặc biệt đó. Thông thường có những người biết rằng rất tốt và họ có thể giúp bạn.


0

Có vẻ như nhân viên của bạn chỉ đang chạy một tiến trình / luồng duy nhất. Bạn có thể chỉ cần thêm --concurrencyhoặc -cđối số khi bắt đầu worker để sinh ra nhiều cá thể worker (song song).

celery -A proj worker -c 4
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.