2015-10-30 16 views
7

Tôi không chắc chắn khi sử dụng nhóm công nhân so với nhiều quy trình.Python Sự khác biệt giữa một quy trình của Hồ bơi công nhân và chỉ chạy nhiều Quy trình là gì?

processes = [] 

for m in range(1,5): 
     p = Process(target=some_function) 
     p.start() 
     processes.append(p) 

for p in processes: 
     p.join() 

vs

if __name__ == '__main__': 
    # start 4 worker processes 
    with Pool(processes=4) as pool: 
     pool_outputs = pool.map(another_function, inputs) 

Trả lời

4

Như nó nói on PYMOTW:

Lớp Pool có thể được sử dụng để quản lý một số cố định của công nhân cho trường hợp đơn giản mà công việc phải thực hiện có thể được chia nhỏ và phân phối giữa các công nhân một cách độc lập.

Giá trị trả lại từ công việc được thu thập và trả về dưới dạng danh sách.

Đối số nhóm bao gồm số lượng quy trình và chức năng để chạy khi bắt đầu quá trình tác vụ (được gọi một lần cho mỗi trẻ).

Vui lòng xem các ví dụ được cung cấp để hiểu rõ hơn về ứng dụng, chức năng và thông số của nó. Về cơ bản hồ bơi là một người trợ giúp, giảm bớt việc quản lý các quy trình (công nhân) trong những trường hợp mà tất cả những gì họ cần làm là tiêu thụ dữ liệu đầu vào chung, xử lý song song và tạo ra kết quả chung.

The Pool hiện khá một vài điều mà nếu không bạn nên mã hóa bản thân (không quá khó, nhưng vẫn còn, nó thuận tiện để tìm một giải pháp làm chín sẵn)

tức

  • tách của Dữ liệu đầu vào
  • chức năng xử lý mục tiêu được đơn giản hóa: nó có thể được thiết kế để chỉ mong đợi một phần tử đầu vào. Pool sẽ gọi nó là cung cấp cho mỗi phần tử từ tập hợp con phân bổ cho rằng người lao động
  • chờ đợi cho người lao động để hoàn thành công việc của họ (tức là tham gia các quá trình)
  • ...
  • sáp nhập đầu ra của từng người lao động để sản xuất sản phẩm cuối cùng
+0

tl; dr phiên bản: sử dụng Hồ bơi để dễ dàng thực hiện song song dữ liệu. Không áp dụng chung cho nhiệm vụ song song. – RobertB

Các vấn đề liên quan