Hướng dẫn threadpoolexecutor trong python
Thứ ba, 23/06/2020 | 00:00 GMT+7 Show Các chuỗi Python là một dạng song song cho phép chương trình của bạn chạy nhiều thủ tục cùng một lúc. Tính song song trong Python cũng có thể đạt được bằng cách sử dụng nhiều quy trình, nhưng các stream đặc biệt phù hợp để tăng tốc các ứng dụng liên quan đến lượng I / O (đầu vào / kết quả ) đáng kể. Ví dụ về hoạt động liên kết I / O bao gồm thực hiện các yêu cầu web và đọc dữ liệu từ các file . Ngược lại với các hoạt động ràng buộc I / O, các hoạt động ràng buộc CPU (như thực hiện phép toán với thư viện chuẩn Python) sẽ không được hưởng lợi nhiều từ các stream Python. Python 3
bao gồm tiện ích Trong hướng dẫn này, ta sẽ sử dụng Đối với hướng dẫn này, ta sẽ thực hiện các yêu cầu mạng để kiểm tra sự tồn tại của các trang Wikipedia .
Lưu ý: Thực tế là các hoạt động liên kết I / O được hưởng lợi nhiều hơn từ các stream so với các hoạt động liên kết CPU là do một đặc điểm riêng trong Python được gọi là khóa thông dịch toàn cục . Nếu muốn, bạn có thể tìm hiểu thêm về khóa thông dịch global của Python trong tài liệu Python chính thức
. Yêu cầu Để tận dụng tối đa hướng dẫn này, bạn nên làm quen với lập trình bằng Python và môi trường lập trình Python local với Bạn có thể xem lại các hướng dẫn này để biết thông tin cơ bản cần thiết:
Bước 1 - Xác định một hàm để thực thi trong chuỗiHãy bắt đầu bằng cách xác định một hàm mà ta muốn thực thi với sự trợ giúp của các stream . Sử dụng
Đối với hướng dẫn này, ta sẽ viết một hàm xác định xem trang Wikipedia có tồn tại hay không: wiki_page_ Chức năng.py
Các Như được mô tả trong phần Yêu cầu , bạn cần cài đặt gói Hãy thử chạy hàm bằng cách thêm wiki_page_ Chức năng.py
Khi bạn đã thêm mã, hãy lưu file . Nếu ta chạy mã này:
Ta sẽ thấy kết quả như sau:
Việc gọi hàm Cảnh báo: Nói chung, không an toàn khi chia sẻ các đối tượng hoặc trạng thái Python giữa các stream mà không cần chú ý đặc biệt để tránh các lỗi đồng thời. Khi xác định một hàm
để thực thi trong một stream , cách tốt nhất là xác định một hàm thực hiện một công việc duy nhất và không chia sẻ hoặc xuất bản trạng thái cho các stream khác. Bước 2 - Sử dụng ThreadPoolExecutor để thực thi một chức năng trong chủ đề Bây giờ ta có một hàm rất phù hợp để gọi với các stream , ta có thể sử dụng Hãy thêm đoạn mã được đánh dấu sau vào chương trình của bạn trong wiki_page_ Chức năng.py
Ta hãy xem cách mã này hoạt động:
Nếu ta chạy lại chương trình này, với lệnh sau:
Ta sẽ thấy kết quả như sau:
Kết quả này có ý nghĩa: 3 trong số các URL là trang Wikipedia hợp lệ
và một trong số chúng Bước 3 - Xử lý ngoại lệ từ các hàm chạy trong chuỗi Trong bước trước, Hãy xem xét khối mã ví dụ sau: wiki_page_ Chức năng.py
Khối mã này gần giống với khối mà ta đã sử dụng ở Bước 2, nhưng nó có hai điểm khác biệt chính:
Nếu ta chạy lại chương trình, ta sẽ thấy kết quả sau:
Bốn thông báo Đến đây bạn đã thấy rằng nếu một lệnh gọi hàm được gửi đến Bước 4 - So sánh thời gian thực thi có và không có stream Bây giờ hãy xác minh việc sử dụng Đầu tiên, hãy dành thời gian wiki_page_ Chức năng.py
Trong ví dụ mã, ta gọi hàm Nếu ta chạy lại mã này như trước, ta sẽ thấy kết quả như sau:
Mục 2–47 trong kết quả này đã được bỏ qua cho ngắn gọn. Số giây được in sau Hãy chạy cùng năm mươi URL Wikipedia thông qua wiki_page_ Chức năng.py
Mã này giống như mã ta đã tạo ở Bước 2, chỉ với việc bổ sung một số câu lệnh in cho ta biết số giây cần thiết để thực thi mã của ta . Nếu ta chạy lại chương trình, ta sẽ thấy như sau:
, số
giây được in sau Đến đây bạn có thể so sánh thời gian thực hiện để tìm nạp 50 URL trang Wikipedia có và không có chuỗi. Trên máy được sử dụng trong hướng dẫn này, không có stream mất Kết luận Trong hướng dẫn này, bạn đã học cách sử dụng trình Từ đây, bạn có thể tìm hiểu thêm về các hàm đồng thời khác được cung cấp bởi mô-đun Tags: Các tin liên quan Cách sử dụng module sqlite3 trong Python 3 |