Việc tạo một chuỗi Python có đắt không?
Tóm lược. trong hướng dẫn này, bạn sẽ học cách sử dụng Python 6 để phát triển các chương trình đa luồng Giới thiệu về lớp Python ThreadPoolExecutorTrong hướng dẫn đa luồng, bạn đã học cách quản lý nhiều luồng trong một chương trình bằng cách sử dụng lớp 7 của mô-đun 8. Lớp 7 rất hữu ích khi bạn muốn tạo chủ đề theo cách thủ công Tuy nhiên, quản lý thủ công các luồng không hiệu quả vì việc tạo và hủy nhiều luồng thường xuyên rất tốn kém về chi phí tính toán Thay vì làm như vậy, bạn có thể muốn sử dụng lại các luồng nếu bạn muốn chạy nhiều tác vụ đặc biệt trong chương trình. Một nhóm chủ đề cho phép bạn đạt được điều này nhóm chủ đềNhóm luồng là một mẫu để đạt được sự thực thi đồng thời trong một chương trình. Nhóm luồng cho phép bạn tự động quản lý nhóm luồng một cách hiệu quả Mỗi thread trong pool được gọi là worker thread hoặc worker. Nhóm luồng cho phép bạn sử dụng lại các luồng công nhân sau khi các tác vụ được hoàn thành. Nó cũng bảo vệ chống lại những lỗi không mong muốn như ngoại lệ Thông thường, nhóm luồng cho phép bạn định cấu hình số lượng luồng công nhân và cung cấp quy ước đặt tên cụ thể cho từng luồng công nhân Để tạo nhóm luồng, bạn sử dụng lớp 6 từ mô-đun 1 ThreadPoolExecutorLớp 6 mở rộng lớp 3 và trả về một đối tượng 4 người thi hànhLớp 3 có ba phương thức để điều khiển nhóm luồng
Khi bạn tạo một thể hiện mới của lớp 6, Python bắt đầu lớp 3 Sau khi hoàn thành làm việc với người thi hành, bạn phải gọi phương thức 40 một cách rõ ràng để giải phóng tài nguyên do người thi hành nắm giữ. Để tránh gọi phương thức 40 một cách rõ ràng, bạn có thể sử dụng trình quản lý ngữ cảnh đối tượng tương laiMột 4 là một đối tượng đại diện cho kết quả cuối cùng của một hoạt động không đồng bộ. Lớp Future có hai phương thức hữu ích
Các ví dụ về ThreadPoolExecutor của PythonChương trình sau sử dụng một luồng duy nhất 2 đầu ra
Làm thế nào nó hoạt động Đầu tiên, xác định hàm 48 mất khoảng một giây để hoàn thành. Hàm 48 gọi hàm 60 để mô phỏng độ trễ
Thứ hai, gọi hàm 48 hai lần và in ra kết quả. Trước và sau khi gọi hàm 48, chúng ta sử dụng 63 để đo thời gian bắt đầu và kết thúc 4 Thứ ba, in ra thời gian chương trình chạy 6 Bởi vì chức năng 64 mất một giây, gọi nó hai lần sẽ mất khoảng 2 giây Sử dụng ví dụ về phương thức submit()Để chạy đồng thời chức năng 64, bạn có thể sử dụng lớp 6 6 đầu ra 7 Đầu ra cho thấy chương trình mất khoảng 1 giây để hoàn thành Cách thức hoạt động (chúng tôi sẽ tập trung vào phần nhóm luồng) Đầu tiên, nhập lớp 6 từ mô-đun 1 0 Thứ hai, tạo nhóm luồng bằng cách sử dụng 6 bằng trình quản lý bối cảnh 2 Thứ ba, gọi hàm 64 hai lần bằng cách chuyển nó tới phương thức 8 của người thi hành 5 Phương thức 8 trả về một đối tượng Tương lai. Trong ví dụ này, chúng ta có hai đối tượng Future là 63 và 64. Để lấy kết quả từ đối tượng Future, chúng ta gọi phương thức 46 của nó Sử dụng ví dụ về phương thức map()Chương trình sau sử dụng một lớp 6. Tuy nhiên, thay vì sử dụng phương thức 8, nó sử dụng phương thức 9 để thực thi một hàm 0 Làm thế nào nó hoạt động Đầu tiên, gọi phương thức 7 của đối tượng thực thi để chạy hàm tác vụ cho từng id trong danh sách [1,2]. Phương thức 7 trả về một iterator chứa kết quả của các lệnh gọi hàm 1 Thứ hai, lặp lại các kết quả và in chúng ra 2 Python ThreadPoolExecutor ví dụ thực tếChương trình sau tải xuống nhiều hình ảnh từ Wikipedia bằng nhóm luồng 3 Làm thế nào nó hoạt động Đầu tiên, hãy xác định một hàm 71 để tải xuống một hình ảnh từ một URL và lưu nó vào một tệp 4 Chức năng 71 chức năng 73 từ mô-đun 74 để tải xuống hình ảnh từ một URL Thứ hai, thực thi hàm 71 bằng nhóm luồng bằng cách gọi phương thức 9 của đối tượng 6 Có tốn kém để tạo chủ đề?1 câu trả lời. Việc tạo luồng Java rất tốn kém vì có khá nhiều công việc liên quan . Một khối bộ nhớ lớn phải được phân bổ và khởi tạo cho ngăn xếp luồng. Các cuộc gọi hệ thống cần được thực hiện để tạo/đăng ký luồng gốc với Hệ điều hành máy chủ.
Chủ đề sinh sản có đắt không?Việc tạo luồng rất tốn kém so với việc tạo hầu hết các đối tượng , nhưng không quá đắt so với tìm kiếm ổ cứng ngẫu nhiên.
Chủ đề có rẻ hơn quy trình không?Chuyển đổi luồng rất hiệu quả và rẻ hơn nhiều vì nó chỉ liên quan đến việc chuyển đổi danh tính và tài nguyên như bộ đếm chương trình, thanh ghi và con trỏ ngăn xếp.
Chủ đề nào đắt hơn?Luồng nhân bảo trì thường tốn kém hơn so với luồng người dùng vì chúng phải được biểu diễn bằng cấu trúc dữ liệu nhân. 4. 3 Mô tả các hành động được thực hiện bởi kernel để chuyển ngữ cảnh giữa các luồng cấp kernel. |