Hướng dẫn dùng python processing python
What is parallel processing?Về cơ bản làm hai việc cùng một lúc, hoặc chạy code đồng thời trên các CPU khác nhau, hoặc chạy code cùng một CPU và đạt được tốc độ tăng tốc bằng cách tận dụng các chu kỳ CPU “lãng phí” trong khi chương trình của bạn đang chờ tài nguyên bên ngoài --upload file, gọi API. Show Nội dung chính
Ví dụ, đây là một chương trình "normal". Nó tải xuống một danh sách các URL tại một thời điểm bằng cách sử dụng một chủ đề duy nhất. Đây là chương trình tương tự sử dụng 2 threads. Nó phân chia các url giữa các thread giúp chúng ta tăng tốc gần gấp đôi.
Biểu đồ cho thấy multiple threads có thể được tạo theo cùng một cách. Các phương thức trong thư viện của Python trả về một mảng kết quả. Process vs ThreadProcess là một phiên bản của program (ví dụ: Jupyter notebook, Python interpreter). Process sinh ra các thread (sub-processes) để xử lý các tác vụ con như đọc keystrokes, loading HTML pages, saving files. Các thread sống bên trong các process và chia sẻ cùng một không gian bộ nhớ. Ví dụ: Microsoft Word Khi bạn mở Word, bạn tạo một process. Khi bạn bắt đầu nhập, process tạo ra các thread: một thread để đọc các lần gõ phím, một thread khác để hiển thị văn bản, một thread để tự động lưu file của bạn và một thread khác để đánh dấu lỗi chính tả. Bằng cách tạo ra nhiều thread, Microsoft tận dụng thời gian CPU nhàn rỗi (chờ các lần gõ phím hoặc tải file) và giúp bạn làm việc hiệu quả hơn. Process
Thread
CPU vs CoreCPU, hoặc bộ xử lý, quản lý công việc tính toán cơ bản của máy tính. CPU có một hoặc nhiều lõi, cho phép CPU thực thi code đồng thời. Với một lõi đơn, không có tốc độ tăng cho các tác vụ đòi hỏi nhiều CPU (ví dụ: vòng lặp, số học). Hệ điều hành chuyển đổi qua lại giữa các tác vụ thực hiện từng tác vụ một chút tại một thời điểm. Đây là lý do tại sao đối với các hoạt động nhỏ (ví dụ: tải xuống một vài hình ảnh), đa nhiệm đôi khi có thể ảnh hưởng đến hiệu suất của bạn. Có chi phí liên quan đến việc khởi chạy và duy trì nhiều tác vụ. Python’s GIL problemCPython (triển khai python tiêu chuẩn) có một thứ gọi là GIL (Global Interpreter Lock), ngăn hai threads thực thi đồng thời trong cùng một chương trình. Một số người khó chịu vì điều này, trong khi những người khác lại quyết liệt bảo vệ nó. Tuy nhiên, vẫn có những cách giải quyết khác và các thư viện như Numpy đã bỏ qua hạn chế này bằng cách chạy mã bên ngoài trong C. When to use threads vs processes?
Parallel processing examplesThư viện concurrent.futures của Python thật thú vị khi làm việc. Chỉ cần chuyển vào function của bạn, list các items cần làm việc và số lượng công nhân
API callsTôi nhận thấy các thread hoạt động tốt hơn cho các cuộc gọi API và quan sát thấy tốc độ tăng lên qua xử lý nối tiếp và đa xử lý.
2 threads4 threads2 processes4 processesIO Heavy TaskTôi đã chuyển qua một loạt các chuỗi văn bản khổng lồ để xem hiệu suất ghi khác nhau như thế nào. Các thread dường như giành chiến thắng ở đây, nhưng đa xử lý cũng cải thiện thời gian chạy.
Serial
4 threads4 processes
CPU IntensiveĐa xử lý đã giành được ngày ở đây như mong đợi. Các quá trình tránh GIL và thực thi code đồng thời trên nhiều lõi.
Serial: 4.2 seconds 4 threads: 6.5 seconds 4 processes: 1.9 seconds Numpy Dot Product Đúng như mong đợi, tôi không thấy lợi ích gì khi thêm thread hoặc process vào code này. Numpy thực thi mã C bên ngoài đằng sau và do đó tránh được GIL.
Serial: 2.8 seconds 2 threads: 3.4 seconds 2 processes: 3.3 seconds Tài liệu tham khảohttps://medium.com/@bfortuner/python-multithreading-vs-multiprocessing-73072ce5600b |