Tôi mới sử dụng đa xử lý bằng Python và cố gắng tìm hiểu xem tôi có nên sử dụng Pool hoặc Process để gọi hai hàm không đồng bộ. Hai hàm tôi đã thực hiện cuộc gọi curl và phân tích thông tin thành 2 danh sách riêng biệt. Tùy thuộc vào kết nối internet, mỗi chức năng có thể mất khoảng 4 giây. Tôi nhận thấy rằng nút cổ chai là trong kết nối ISP và đa xử lý sẽ không tăng tốc độ nó lên nhiều, nhưng nó sẽ là tốt đẹp để có cả hai đều khởi động async. Thêm vào đó, đây là một trải nghiệm học tập tuyệt vời cho tôi để bắt đầu với quá trình đa xử lý của python vì tôi sẽ sử dụng nó sau này.Xử lý đa xử lý Python hoặc Pool cho những gì tôi đang làm?
Tôi đã đọc Python multiprocessing.Pool: when to use apply, apply_async or map? và nó hữu ích, nhưng vẫn có câu hỏi của riêng tôi.
Vì vậy, một trong những cách tôi có thể làm điều đó là:
Câu hỏi tôi có thực hiện này là: 1) Kể từ khi gia nhập khối cho đến khi quá trình gọi là hoàn thành ... Điều này có nghĩa là quá trình p1 có để kết thúc trước khi quá trình p2 được khởi động? Tôi luôn hiểu hàm .join() giống như pool.apply() và pool.apply_sync(). Get() trong đó tiến trình cha không thể khởi chạy tiến trình (tác vụ) khác cho đến khi tiến trình đang chạy được hoàn thành.
Các lựa chọn khác sẽ là một cái gì đó như:
def foo():
pass
def bar():
pass
pool = Pool(processes=2)
p1 = pool.apply_async(foo)
p1 = pool.apply_async(bar)
Câu hỏi tôi có thực hiện này sẽ là: 1) Tôi có cần một pool.close(), pool.join()? 2) Pool.map() có làm cho chúng hoàn chỉnh trước khi tôi có thể nhận được kết quả không? Và nếu vậy, họ vẫn chạy asynch? 3) Cách pool.apply_async() khác với việc thực hiện từng quy trình với pool.apply() 4) Điều này khác với cách thực hiện trước đó với Quy trình như thế nào?
Bạn có chắc chắn quá trình p1 phải hoàn tất trước khi quá trình p2 được khởi động vì tham gia() không? đầu ra từ http://bpaste.net/show/ruHgFTAAMkN4UT2INPqu/ trông giống như trên p2 kicks off trước khi p1 kết thúc. – dman
Ý tôi là, 'p2' sẽ được nối sau khi' p1' được kết thúc. Xin lỗi vì sự hiểu nhầm. Tất nhiên, cả hai quá trình khởi động ngay khi 'start()' thích hợp đã trở lại. –