2012-01-16 32 views
5

Tôi có chương trình Python mất khoảng 10 phút để thực thi. Vì vậy, tôi sử dụng Pool từ multiprocessing để tăng tốc:Quy trình liên tục Đăng hồ sơ Python

from multiprocessing import Pool 
p = Pool(processes = 6) # I have an 8 thread processor 
results = p.map(function, argument_list) # distributes work over 6 processes! 

Nó chạy nhanh hơn nhiều, chỉ cần từ đó. Chúa ban phước cho Python! Và tôi nghĩ đó sẽ là nó.

Tuy nhiên tôi đã nhận thấy rằng mỗi khi tôi làm điều này, các quy trình và trạng thái có kích thước đáng kể của chúng vẫn còn, ngay cả khi p đã hết hạn; hiệu quả, tôi đã tạo ra một rò rỉ bộ nhớ. Các quá trình hiển thị trong ứng dụng Màn hình hệ thống của tôi như các quy trình Python, không sử dụng CPU vào thời điểm này, nhưng bộ nhớ đáng kể để duy trì trạng thái của chúng.

Hồ bơi có chức năng close, terminatejoin và tôi giả định một trong số đó sẽ giết các quy trình. Có ai biết đó là cách tốt nhất để nói với hồ bơi của tôi p rằng tôi đã kết thúc với nó?

Cảm ơn rất nhiều sự giúp đỡ của bạn!

Trả lời

5

Từ Python docs, có vẻ như bạn cần làm:

p.close() 
p.join() 

sau map() để chỉ ra rằng những người lao động nên chấm dứt và sau đó chờ cho họ làm như vậy.