Ngoài việc sử dụng mô-đun multiprocessing
khi nói đến các quá trình kết nối với tài nguyên truyền thông, có bất kỳ khác biệt nào khác giữa sinh sản nhiều quy trình hay không bằng cách sử dụng multiprocessing
so với sử dụng subprocess
Máy ảo Python?Quá trình đa xử lý Python so với máy ảo Python độc lập
Trả lời
Trên nền tảng Posix, multiprocessing
nguyên thủy cơ bản quấn một số os.fork()
. Điều này có nghĩa là tại thời điểm bạn sinh ra một quá trình trong đa xử lý, mã đã được nhập/khởi tạo vẫn như vậy trong tiến trình con. Điều này có thể là một lợi ích nếu bạn có rất nhiều thứ để khởi tạo và sau đó mỗi tiến trình con về cơ bản thực hiện các hoạt động trên (bản sao) các đối tượng khởi tạo, nhưng không phải tất cả những gì hữu ích nếu điều bạn chạy trong tiến trình con hoàn toàn không liên quan .
Ngoài ra còn có ý nghĩa đối với các tài nguyên như xử lý tệp, ổ cắm, v.v ... với multiprocessing
trên nền tảng giống như Unix.
Khi đó, khi sử dụng subprocess
, bạn sẽ tạo chương trình/phiên dịch hoàn toàn mới mỗi lần bạn Popen
quy trình mới. Điều này có nghĩa là có thể có ít bộ nhớ được chia sẻ hơn giữa chúng, nhưng nó cũng có nghĩa là bạn có thể Popen thành một chương trình hoàn toàn riêng biệt, hoặc một điểm vào mới vào cùng một chương trình.
Trên Windows, sự khác biệt ít hơn giữa multiprocessing
và subprocess
, vì cửa sổ không cung cấp fork()
.
Nếu bạn bỏ qua bất kỳ sự cố liên lạc nào (tức là nếu các máy ảo Python riêng biệt không giao tiếp với nhau hoặc chỉ giao tiếp thông qua các cơ chế khác được thiết lập rõ ràng) thì không có sự khác biệt đáng kể nào khác. (Tôi tin rằng multiprocessing
, trong những điều kiện nhất định - nền tảng giống Unix, đặc biệt - có thể sử dụng hiệu quả hơn fork
thay vì cặp fork-exec luôn ngụ ý bởi multiprocessing
- nhưng đó không phải là "đáng kể" khi chỉ một vài quy trình tham gia [[IOW, sự khác biệt hiệu suất khi khởi động sẽ không phải là tài liệu cho hiệu suất của toàn bộ hệ thống]]).
Cảm ơn Alex lần nữa! – jldupont
- 1. python đa xử lý
- 2. Lập hồ sơ đa xử lý python
- 3. Python đa lập trình
- 4. Python: Xử lý đa lõi?
- 5. Vấn đề ssl của Python với đa xử lý
- 6. Thiết kế đa xử lý Python
- 7. Xử lý đa Python cho các quy trình song song
- 8. Khả năng xử lý đa xử lý Python
- 9. Hàng đợi đa xử lý trong Python
- 10. Đa xử lý Python - Cách giải phóng bộ nhớ khi quá trình được thực hiện?
- 11. giao thức xử lý đa xử lý python
- 12. python đa bơi, chờ cho quá trình và khởi động lại tùy chỉnh xử lý
- 13. NumPy so với đa xử lý và mmap
- 14. Đa xử lý Python: Nhóm các quy trình tùy chỉnh
- 15. Sử dụng đa xử lý python với các hạt giống ngẫu nhiên khác nhau cho mỗi quá trình
- 16. Làm thế nào để chấm dứt đúng quy trình con với đa xử lý trong python
- 17. đa xử lý hoặc luồng trong python?
- 18. retthon đa xử lý hồ bơi python
- 19. Lưu trữ ảo với máy chủ node.js độc lập
- 20. Python, đa luồng quá chậm, đa tiến
- 21. quyết định giữa xử lý con, đa xử lý và chuỗi trong Python?
- 22. Python: Khi nào nên sử dụng Chủ đề so với Đa xử lý
- 23. Trình xử lý đa xử lý và khách hàng giữa python và pypy
- 24. Tài liệu đa xử lý Python Ví dụ
- 25. Biến chia sẻ trong đa xử lý của python
- 26. Lỗi đa xử lý Python lỗi "Lỗi trong atexit._run_exitfuncs"
- 27. Bể đa xử lý Python bị treo khi tham gia?
- 28. Sửa đổi đối tượng trong đa xử lý python
- 29. Xử lý đa xử lý Python hoặc Pool cho những gì tôi đang làm?
- 30. Xử lý tín hiệu trong Máy ảo Java
điểm tốt ... cảm ơn! – jldupont
Microsoft cung cấp 'fork()' trong các phiên bản cao cấp của Windows. Xem [answer] của tôi (http://stackoverflow.com/a/5372260/95735) để biết chi tiết. –
@PiotrDobrogost Nhưng tôi không tin rằng "đa xử lý" trên cửa sổ tận dụng điều này. – Crast