Làm thế nào để bạn đợi tất cả các chủ đề hoàn thành trong python?
Việc thực thi không đồng bộ có thể được thực hiện với các luồng, sử dụng import shutil with ThreadPoolExecutor(max_workers=4) as e: e.submit(shutil.copy, 'src1.txt', 'dest1.txt') e.submit(shutil.copy, 'src2.txt', 'dest2.txt') e.submit(shutil.copy, 'src3.txt', 'dest3.txt') e.submit(shutil.copy, 'src4.txt', 'dest4.txt')05 hoặc các quy trình riêng biệt, sử dụng import shutil with ThreadPoolExecutor(max_workers=4) as e: e.submit(shutil.copy, 'src1.txt', 'dest1.txt') e.submit(shutil.copy, 'src2.txt', 'dest2.txt') e.submit(shutil.copy, 'src3.txt', 'dest3.txt') e.submit(shutil.copy, 'src4.txt', 'dest4.txt')06. Cả hai đều triển khai cùng một giao diện, được xác định bởi lớp trừu tượng import shutil with ThreadPoolExecutor(max_workers=4) as e: e.submit(shutil.copy, 'src1.txt', 'dest1.txt') e.submit(shutil.copy, 'src2.txt', 'dest2.txt') e.submit(shutil.copy, 'src3.txt', 'dest3.txt') e.submit(shutil.copy, 'src4.txt', 'dest4.txt')0 Show
Tính khả dụng . không phải Emscripten, không phải WASI. Mô-đun này không hoạt động hoặc không khả dụng trên nền tảng WebAssembly import shutil with ThreadPoolExecutor(max_workers=4) as e: e.submit(shutil.copy, 'src1.txt', 'dest1.txt') e.submit(shutil.copy, 'src2.txt', 'dest2.txt') e.submit(shutil.copy, 'src3.txt', 'dest3.txt') e.submit(shutil.copy, 'src4.txt', 'dest4.txt')1 và import shutil with ThreadPoolExecutor(max_workers=4) as e: e.submit(shutil.copy, 'src1.txt', 'dest1.txt') e.submit(shutil.copy, 'src2.txt', 'dest2.txt') e.submit(shutil.copy, 'src3.txt', 'dest3.txt') e.submit(shutil.copy, 'src4.txt', 'dest4.txt')2. Xem Nền tảng WebAssugging để biết thêm thông tin. Đối tượng thực thi¶lớp đồng thời. tương lai. Người thi hành ¶Một lớp trừu tượng cung cấp các phương thức để thực hiện các cuộc gọi không đồng bộ. Nó không nên được sử dụng trực tiếp mà thông qua các lớp con cụ thể của nó
ThreadPoolExecutor¶import shutil with ThreadPoolExecutor(max_workers=4) as e: e.submit(shutil.copy, 'src1.txt', 'dest1.txt') e.submit(shutil.copy, 'src2.txt', 'dest2.txt') e.submit(shutil.copy, 'src3.txt', 'dest3.txt') e.submit(shutil.copy, 'src4.txt', 'dest4.txt')05 là một lớp con import shutil with ThreadPoolExecutor(max_workers=4) as e: e.submit(shutil.copy, 'src1.txt', 'dest1.txt') e.submit(shutil.copy, 'src2.txt', 'dest2.txt') e.submit(shutil.copy, 'src3.txt', 'dest3.txt') e.submit(shutil.copy, 'src4.txt', 'dest4.txt')0 sử dụng một nhóm các luồng để thực hiện các cuộc gọi không đồng bộ Bế tắc có thể xảy ra khi khả năng gọi được liên kết với một import shutil with ThreadPoolExecutor(max_workers=4) as e: e.submit(shutil.copy, 'src1.txt', 'dest1.txt') e.submit(shutil.copy, 'src2.txt', 'dest2.txt') e.submit(shutil.copy, 'src3.txt', 'dest3.txt') e.submit(shutil.copy, 'src4.txt', 'dest4.txt')4 chờ kết quả của một import shutil with ThreadPoolExecutor(max_workers=4) as e: e.submit(shutil.copy, 'src1.txt', 'dest1.txt') e.submit(shutil.copy, 'src2.txt', 'dest2.txt') e.submit(shutil.copy, 'src3.txt', 'dest3.txt') e.submit(shutil.copy, 'src4.txt', 'dest4.txt')4 khác. Ví dụ import shutil with ThreadPoolExecutor(max_workers=4) as e: e.submit(shutil.copy, 'src1.txt', 'dest1.txt') e.submit(shutil.copy, 'src2.txt', 'dest2.txt') e.submit(shutil.copy, 'src3.txt', 'dest3.txt') e.submit(shutil.copy, 'src4.txt', 'dest4.txt')1 Và import shutil with ThreadPoolExecutor(max_workers=4) as e: e.submit(shutil.copy, 'src1.txt', 'dest1.txt') e.submit(shutil.copy, 'src2.txt', 'dest2.txt') e.submit(shutil.copy, 'src3.txt', 'dest3.txt') e.submit(shutil.copy, 'src4.txt', 'dest4.txt')0lớp đồng thời. tương lai. ThreadPoolExecutor(max_workers=Không có, thread_name_prefix='', initializer=None, initargs=())¶ Một lớp con import shutil with ThreadPoolExecutor(max_workers=4) as e: e.submit(shutil.copy, 'src1.txt', 'dest1.txt') e.submit(shutil.copy, 'src2.txt', 'dest2.txt') e.submit(shutil.copy, 'src3.txt', 'dest3.txt') e.submit(shutil.copy, 'src4.txt', 'dest4.txt')0 sử dụng nhóm tối đa max_workers luồng để thực hiện lệnh gọi không đồng bộ Tất cả các chủ đề được liệt kê vào import shutil with ThreadPoolExecutor(max_workers=4) as e: e.submit(shutil.copy, 'src1.txt', 'dest1.txt') e.submit(shutil.copy, 'src2.txt', 'dest2.txt') e.submit(shutil.copy, 'src3.txt', 'dest3.txt') e.submit(shutil.copy, 'src4.txt', 'dest4.txt')05 sẽ được nối trước khi trình thông dịch có thể thoát. Lưu ý rằng trình xử lý thoát thực hiện việc này được thực thi trước bất kỳ trình xử lý thoát nào được thêm bằng cách sử dụng import shutil with ThreadPoolExecutor(max_workers=4) as e: e.submit(shutil.copy, 'src1.txt', 'dest1.txt') e.submit(shutil.copy, 'src2.txt', 'dest2.txt') e.submit(shutil.copy, 'src3.txt', 'dest3.txt') e.submit(shutil.copy, 'src4.txt', 'dest4.txt')09. Điều này có nghĩa là các ngoại lệ trong luồng chính phải được bắt và xử lý để báo hiệu các luồng thoát ra một cách duyên dáng. Vì lý do này, không nên sử dụng import shutil with ThreadPoolExecutor(max_workers=4) as e: e.submit(shutil.copy, 'src1.txt', 'dest1.txt') e.submit(shutil.copy, 'src2.txt', 'dest2.txt') e.submit(shutil.copy, 'src3.txt', 'dest3.txt') e.submit(shutil.copy, 'src4.txt', 'dest4.txt')05 cho các tác vụ chạy dài trình khởi tạo là một tùy chọn có thể gọi được gọi khi bắt đầu mỗi luồng công nhân; . Nếu trình khởi tạo đưa ra một ngoại lệ, thì tất cả các công việc đang chờ xử lý hiện tại sẽ tăng một import shutil with ThreadPoolExecutor(max_workers=4) as e: e.submit(shutil.copy, 'src1.txt', 'dest1.txt') e.submit(shutil.copy, 'src2.txt', 'dest2.txt') e.submit(shutil.copy, 'src3.txt', 'dest3.txt') e.submit(shutil.copy, 'src4.txt', 'dest4.txt')01, cũng như bất kỳ nỗ lực nào để gửi thêm công việc vào nhóm Đã thay đổi trong phiên bản 3. 5. Nếu max_workers là import shutil with ThreadPoolExecutor(max_workers=4) as e: e.submit(shutil.copy, 'src1.txt', 'dest1.txt') e.submit(shutil.copy, 'src2.txt', 'dest2.txt') e.submit(shutil.copy, 'src3.txt', 'dest3.txt') e.submit(shutil.copy, 'src4.txt', 'dest4.txt')9 hoặc không được cung cấp, nó sẽ mặc định là số lượng bộ xử lý trên máy, nhân với import shutil with ThreadPoolExecutor(max_workers=4) as e: e.submit(shutil.copy, 'src1.txt', 'dest1.txt') e.submit(shutil.copy, 'src2.txt', 'dest2.txt') e.submit(shutil.copy, 'src3.txt', 'dest3.txt') e.submit(shutil.copy, 'src4.txt', 'dest4.txt')03, giả sử rằng import shutil with ThreadPoolExecutor(max_workers=4) as e: e.submit(shutil.copy, 'src1.txt', 'dest1.txt') e.submit(shutil.copy, 'src2.txt', 'dest2.txt') e.submit(shutil.copy, 'src3.txt', 'dest3.txt') e.submit(shutil.copy, 'src4.txt', 'dest4.txt')05 thường được sử dụng để chồng chéo I/O thay vì công việc của CPU và . Mới trong phiên bản 3. 6. Đối số thread_name_prefix đã được thêm vào để cho phép người dùng kiểm soát tên import shutil with ThreadPoolExecutor(max_workers=4) as e: e.submit(shutil.copy, 'src1.txt', 'dest1.txt') e.submit(shutil.copy, 'src2.txt', 'dest2.txt') e.submit(shutil.copy, 'src3.txt', 'dest3.txt') e.submit(shutil.copy, 'src4.txt', 'dest4.txt')06 cho chuỗi công nhân do nhóm tạo để gỡ lỗi dễ dàng hơn. Đã thay đổi trong phiên bản 3. 7. Đã thêm các đối số khởi tạo và khởi tạo. Đã thay đổi trong phiên bản 3. 8. Giá trị mặc định của max_workers được đổi thành import shutil with ThreadPoolExecutor(max_workers=4) as e: e.submit(shutil.copy, 'src1.txt', 'dest1.txt') e.submit(shutil.copy, 'src2.txt', 'dest2.txt') e.submit(shutil.copy, 'src3.txt', 'dest3.txt') e.submit(shutil.copy, 'src4.txt', 'dest4.txt')07. Giá trị mặc định này duy trì ít nhất 5 worker cho các tác vụ ràng buộc I/O. Nó sử dụng tối đa 32 lõi CPU cho các tác vụ liên quan đến CPU giải phóng GIL. Và nó tránh sử dụng hoàn toàn các tài nguyên rất lớn trên các máy nhiều lõi. ThreadPoolExecutor hiện sử dụng lại các chuỗi công nhân nhàn rỗi trước khi bắt đầu các chuỗi công nhân max_workers Ví dụ về ThreadPoolExecutor¶import shutil with ThreadPoolExecutor(max_workers=4) as e: e.submit(shutil.copy, 'src1.txt', 'dest1.txt') e.submit(shutil.copy, 'src2.txt', 'dest2.txt') e.submit(shutil.copy, 'src3.txt', 'dest3.txt') e.submit(shutil.copy, 'src4.txt', 'dest4.txt')0 ProcessPoolExecutor¶Lớp import shutil with ThreadPoolExecutor(max_workers=4) as e: e.submit(shutil.copy, 'src1.txt', 'dest1.txt') e.submit(shutil.copy, 'src2.txt', 'dest2.txt') e.submit(shutil.copy, 'src3.txt', 'dest3.txt') e.submit(shutil.copy, 'src4.txt', 'dest4.txt')06 là một lớp con import shutil with ThreadPoolExecutor(max_workers=4) as e: e.submit(shutil.copy, 'src1.txt', 'dest1.txt') e.submit(shutil.copy, 'src2.txt', 'dest2.txt') e.submit(shutil.copy, 'src3.txt', 'dest3.txt') e.submit(shutil.copy, 'src4.txt', 'dest4.txt')0 sử dụng một nhóm các quy trình để thực hiện các lệnh gọi không đồng bộ. import shutil with ThreadPoolExecutor(max_workers=4) as e: e.submit(shutil.copy, 'src1.txt', 'dest1.txt') e.submit(shutil.copy, 'src2.txt', 'dest2.txt') e.submit(shutil.copy, 'src3.txt', 'dest3.txt') e.submit(shutil.copy, 'src4.txt', 'dest4.txt')06 sử dụng mô-đun import shutil with ThreadPoolExecutor(max_workers=4) as e: e.submit(shutil.copy, 'src1.txt', 'dest1.txt') e.submit(shutil.copy, 'src2.txt', 'dest2.txt') e.submit(shutil.copy, 'src3.txt', 'dest3.txt') e.submit(shutil.copy, 'src4.txt', 'dest4.txt')71, cho phép nó vượt qua Khóa thông dịch viên toàn cầu nhưng cũng có nghĩa là chỉ các đối tượng có thể chọn mới có thể được thực thi và trả về. Mô-đun import shutil with ThreadPoolExecutor(max_workers=4) as e: e.submit(shutil.copy, 'src1.txt', 'dest1.txt') e.submit(shutil.copy, 'src2.txt', 'dest2.txt') e.submit(shutil.copy, 'src3.txt', 'dest3.txt') e.submit(shutil.copy, 'src4.txt', 'dest4.txt')72 phải được nhập bởi các quy trình con worker. Điều này có nghĩa là import shutil with ThreadPoolExecutor(max_workers=4) as e: e.submit(shutil.copy, 'src1.txt', 'dest1.txt') e.submit(shutil.copy, 'src2.txt', 'dest2.txt') e.submit(shutil.copy, 'src3.txt', 'dest3.txt') e.submit(shutil.copy, 'src4.txt', 'dest4.txt')06 sẽ không hoạt động trong trình thông dịch tương tác Gọi các phương thức import shutil with ThreadPoolExecutor(max_workers=4) as e: e.submit(shutil.copy, 'src1.txt', 'dest1.txt') e.submit(shutil.copy, 'src2.txt', 'dest2.txt') e.submit(shutil.copy, 'src3.txt', 'dest3.txt') e.submit(shutil.copy, 'src4.txt', 'dest4.txt')0 hoặc import shutil with ThreadPoolExecutor(max_workers=4) as e: e.submit(shutil.copy, 'src1.txt', 'dest1.txt') e.submit(shutil.copy, 'src2.txt', 'dest2.txt') e.submit(shutil.copy, 'src3.txt', 'dest3.txt') e.submit(shutil.copy, 'src4.txt', 'dest4.txt')4 từ một khả năng gọi được gửi tới một import shutil with ThreadPoolExecutor(max_workers=4) as e: e.submit(shutil.copy, 'src1.txt', 'dest1.txt') e.submit(shutil.copy, 'src2.txt', 'dest2.txt') e.submit(shutil.copy, 'src3.txt', 'dest3.txt') e.submit(shutil.copy, 'src4.txt', 'dest4.txt')06 sẽ dẫn đến bế tắclớp đồng thời. tương lai. ProcessPoolExecutor(max_workers=Không có, mp_context=None, initializer=None, initargs=(), max_tasks_per_child=None)¶ Một lớp con import shutil with ThreadPoolExecutor(max_workers=4) as e: e.submit(shutil.copy, 'src1.txt', 'dest1.txt') e.submit(shutil.copy, 'src2.txt', 'dest2.txt') e.submit(shutil.copy, 'src3.txt', 'dest3.txt') e.submit(shutil.copy, 'src4.txt', 'dest4.txt')0 thực thi các cuộc gọi không đồng bộ bằng cách sử dụng nhóm tối đa các quy trình max_workers. Nếu max_workers là import shutil with ThreadPoolExecutor(max_workers=4) as e: e.submit(shutil.copy, 'src1.txt', 'dest1.txt') e.submit(shutil.copy, 'src2.txt', 'dest2.txt') e.submit(shutil.copy, 'src3.txt', 'dest3.txt') e.submit(shutil.copy, 'src4.txt', 'dest4.txt')9 hoặc không được cung cấp thì nó sẽ mặc định là số lượng bộ xử lý trên máy. Nếu max_workers nhỏ hơn hoặc bằng import shutil with ThreadPoolExecutor(max_workers=4) as e: e.submit(shutil.copy, 'src1.txt', 'dest1.txt') e.submit(shutil.copy, 'src2.txt', 'dest2.txt') e.submit(shutil.copy, 'src3.txt', 'dest3.txt') e.submit(shutil.copy, 'src4.txt', 'dest4.txt')79 thì sẽ tăng import shutil with ThreadPoolExecutor(max_workers=4) as e: e.submit(shutil.copy, 'src1.txt', 'dest1.txt') e.submit(shutil.copy, 'src2.txt', 'dest2.txt') e.submit(shutil.copy, 'src3.txt', 'dest3.txt') e.submit(shutil.copy, 'src4.txt', 'dest4.txt')180. Trên Windows, max_workers phải nhỏ hơn hoặc bằng import shutil with ThreadPoolExecutor(max_workers=4) as e: e.submit(shutil.copy, 'src1.txt', 'dest1.txt') e.submit(shutil.copy, 'src2.txt', 'dest2.txt') e.submit(shutil.copy, 'src3.txt', 'dest3.txt') e.submit(shutil.copy, 'src4.txt', 'dest4.txt')181. Nếu không thì import shutil with ThreadPoolExecutor(max_workers=4) as e: e.submit(shutil.copy, 'src1.txt', 'dest1.txt') e.submit(shutil.copy, 'src2.txt', 'dest2.txt') e.submit(shutil.copy, 'src3.txt', 'dest3.txt') e.submit(shutil.copy, 'src4.txt', 'dest4.txt')180 sẽ được nâng lên. Nếu max_workers là import shutil with ThreadPoolExecutor(max_workers=4) as e: e.submit(shutil.copy, 'src1.txt', 'dest1.txt') e.submit(shutil.copy, 'src2.txt', 'dest2.txt') e.submit(shutil.copy, 'src3.txt', 'dest3.txt') e.submit(shutil.copy, 'src4.txt', 'dest4.txt')9, thì mặc định được chọn tối đa là import shutil with ThreadPoolExecutor(max_workers=4) as e: e.submit(shutil.copy, 'src1.txt', 'dest1.txt') e.submit(shutil.copy, 'src2.txt', 'dest2.txt') e.submit(shutil.copy, 'src3.txt', 'dest3.txt') e.submit(shutil.copy, 'src4.txt', 'dest4.txt')181, ngay cả khi có nhiều bộ xử lý hơn. mp_context có thể là ngữ cảnh đa xử lý hoặc Không. Nó sẽ được sử dụng để khởi động công nhân. Nếu mp_context là import shutil with ThreadPoolExecutor(max_workers=4) as e: e.submit(shutil.copy, 'src1.txt', 'dest1.txt') e.submit(shutil.copy, 'src2.txt', 'dest2.txt') e.submit(shutil.copy, 'src3.txt', 'dest3.txt') e.submit(shutil.copy, 'src4.txt', 'dest4.txt')9 hoặc không được cung cấp, ngữ cảnh đa xử lý mặc định sẽ được sử dụng trình khởi tạo là một tùy chọn có thể gọi được gọi khi bắt đầu mỗi quy trình worker; . Nếu bộ khởi tạo đưa ra một ngoại lệ, thì tất cả các công việc đang chờ xử lý sẽ tăng một import shutil with ThreadPoolExecutor(max_workers=4) as e: e.submit(shutil.copy, 'src1.txt', 'dest1.txt') e.submit(shutil.copy, 'src2.txt', 'dest2.txt') e.submit(shutil.copy, 'src3.txt', 'dest3.txt') e.submit(shutil.copy, 'src4.txt', 'dest4.txt')186, cũng như bất kỳ nỗ lực nào để gửi thêm công việc vào nhóm max_tasks_per_child là một đối số tùy chọn chỉ định số lượng tác vụ tối đa mà một quy trình có thể thực thi trước khi thoát và được thay thế bằng một quy trình worker mới. Theo mặc định, max_tasks_per_child là import shutil with ThreadPoolExecutor(max_workers=4) as e: e.submit(shutil.copy, 'src1.txt', 'dest1.txt') e.submit(shutil.copy, 'src2.txt', 'dest2.txt') e.submit(shutil.copy, 'src3.txt', 'dest3.txt') e.submit(shutil.copy, 'src4.txt', 'dest4.txt')9, điều đó có nghĩa là worker process sẽ tồn tại miễn là nhóm. Khi giá trị tối đa được chỉ định, phương thức bắt đầu đa xử lý "sinh sản" sẽ được sử dụng theo mặc định khi không có tham số mp_context. Tính năng này không tương thích với phương thức khởi động “rẽ nhánh” Đã thay đổi trong phiên bản 3. 3. Khi một trong các quy trình công nhân chấm dứt đột ngột, lỗi import shutil with ThreadPoolExecutor(max_workers=4) as e: e.submit(shutil.copy, 'src1.txt', 'dest1.txt') e.submit(shutil.copy, 'src2.txt', 'dest2.txt') e.submit(shutil.copy, 'src3.txt', 'dest3.txt') e.submit(shutil.copy, 'src4.txt', 'dest4.txt')186 sẽ xuất hiện. Trước đây, hành vi không được xác định nhưng các hoạt động trên bộ thực thi hoặc tương lai của nó thường bị đóng băng hoặc bế tắc. Đã thay đổi trong phiên bản 3. 7. Đối số mp_context đã được thêm vào để cho phép người dùng kiểm soát start_method cho các quy trình worker được tạo bởi nhóm. Đã thêm các đối số trình khởi tạo và khởi tạo Đã thay đổi trong phiên bản 3. 11. Đối số max_tasks_per_child đã được thêm vào để cho phép người dùng kiểm soát thời gian tồn tại của công nhân trong nhóm. ProcessPoolExecutor Ví dụ¶import shutil with ThreadPoolExecutor(max_workers=4) as e: e.submit(shutil.copy, 'src1.txt', 'dest1.txt') e.submit(shutil.copy, 'src2.txt', 'dest2.txt') e.submit(shutil.copy, 'src3.txt', 'dest3.txt') e.submit(shutil.copy, 'src4.txt', 'dest4.txt')7 Đối tượng tương lai¶Lớp import shutil with ThreadPoolExecutor(max_workers=4) as e: e.submit(shutil.copy, 'src1.txt', 'dest1.txt') e.submit(shutil.copy, 'src2.txt', 'dest2.txt') e.submit(shutil.copy, 'src3.txt', 'dest3.txt') e.submit(shutil.copy, 'src4.txt', 'dest4.txt')4 gói gọn việc thực thi không đồng bộ của một hàm có thể gọi được. Phiên bản import shutil with ThreadPoolExecutor(max_workers=4) as e: e.submit(shutil.copy, 'src1.txt', 'dest1.txt') e.submit(shutil.copy, 'src2.txt', 'dest2.txt') e.submit(shutil.copy, 'src3.txt', 'dest3.txt') e.submit(shutil.copy, 'src4.txt', 'dest4.txt')4 được tạo bởi import shutil with ThreadPoolExecutor(max_workers=4) as e: e.submit(shutil.copy, 'src1.txt', 'dest1.txt') e.submit(shutil.copy, 'src2.txt', 'dest2.txt') e.submit(shutil.copy, 'src3.txt', 'dest3.txt') e.submit(shutil.copy, 'src4.txt', 'dest4.txt')12lớp đồng thời. tương lai. Tương lai ¶ Đóng gói việc thực thi không đồng bộ của một callable. Phiên bản import shutil with ThreadPoolExecutor(max_workers=4) as e: e.submit(shutil.copy, 'src1.txt', 'dest1.txt') e.submit(shutil.copy, 'src2.txt', 'dest2.txt') e.submit(shutil.copy, 'src3.txt', 'dest3.txt') e.submit(shutil.copy, 'src4.txt', 'dest4.txt')4 được tạo bởi import shutil with ThreadPoolExecutor(max_workers=4) as e: e.submit(shutil.copy, 'src1.txt', 'dest1.txt') e.submit(shutil.copy, 'src2.txt', 'dest2.txt') e.submit(shutil.copy, 'src3.txt', 'dest3.txt') e.submit(shutil.copy, 'src4.txt', 'dest4.txt')12 và không được tạo trực tiếp ngoại trừ để thử nghiệm
Các phương pháp import shutil with ThreadPoolExecutor(max_workers=4) as e: e.submit(shutil.copy, 'src1.txt', 'dest1.txt') e.submit(shutil.copy, 'src2.txt', 'dest2.txt') e.submit(shutil.copy, 'src3.txt', 'dest3.txt') e.submit(shutil.copy, 'src4.txt', 'dest4.txt')4 sau đây được sử dụng trong các bài kiểm tra đơn vị và triển khai import shutil with ThreadPoolExecutor(max_workers=4) as e: e.submit(shutil.copy, 'src1.txt', 'dest1.txt') e.submit(shutil.copy, 'src2.txt', 'dest2.txt') e.submit(shutil.copy, 'src3.txt', 'dest3.txt') e.submit(shutil.copy, 'src4.txt', 'dest4.txt')0
Chức năng mô-đun¶đồng thời. tương lai. chờ đã(fs , hết thời gian=None, return_when=ALL_COMPLETED)¶Đợi các phiên bản import shutil with ThreadPoolExecutor(max_workers=4) as e: e.submit(shutil.copy, 'src1.txt', 'dest1.txt') e.submit(shutil.copy, 'src2.txt', 'dest2.txt') e.submit(shutil.copy, 'src3.txt', 'dest3.txt') e.submit(shutil.copy, 'src4.txt', 'dest4.txt')4 (có thể được tạo bởi các phiên bản import shutil with ThreadPoolExecutor(max_workers=4) as e: e.submit(shutil.copy, 'src1.txt', 'dest1.txt') e.submit(shutil.copy, 'src2.txt', 'dest2.txt') e.submit(shutil.copy, 'src3.txt', 'dest3.txt') e.submit(shutil.copy, 'src4.txt', 'dest4.txt')0 khác) do fs cung cấp để hoàn thành. Các hợp đồng tương lai trùng lặp được cung cấp cho fs sẽ bị xóa và sẽ chỉ được trả lại một lần. Trả về 2 bộ đã đặt tên. Bộ đầu tiên, có tên là import shutil with ThreadPoolExecutor(max_workers=4) as e: e.submit(shutil.copy, 'src1.txt', 'dest1.txt') e.submit(shutil.copy, 'src2.txt', 'dest2.txt') e.submit(shutil.copy, 'src3.txt', 'dest3.txt') e.submit(shutil.copy, 'src4.txt', 'dest4.txt')16, chứa các hợp đồng tương lai đã hoàn thành (hợp đồng tương lai đã hoàn thành hoặc bị hủy) trước khi quá trình chờ đợi hoàn tất. Bộ thứ hai, có tên là import shutil with ThreadPoolExecutor(max_workers=4) as e: e.submit(shutil.copy, 'src1.txt', 'dest1.txt') e.submit(shutil.copy, 'src2.txt', 'dest2.txt') e.submit(shutil.copy, 'src3.txt', 'dest3.txt') e.submit(shutil.copy, 'src4.txt', 'dest4.txt')17, chứa các hợp đồng tương lai chưa hoàn thành (hợp đồng tương lai đang chờ xử lý hoặc đang hoạt động) thời gian chờ có thể được sử dụng để kiểm soát số giây tối đa phải đợi trước khi quay lại. thời gian chờ có thể là int hoặc float. Nếu thời gian chờ không được chỉ định hoặc import shutil with ThreadPoolExecutor(max_workers=4) as e: e.submit(shutil.copy, 'src1.txt', 'dest1.txt') e.submit(shutil.copy, 'src2.txt', 'dest2.txt') e.submit(shutil.copy, 'src3.txt', 'dest3.txt') e.submit(shutil.copy, 'src4.txt', 'dest4.txt')9, không có giới hạn về thời gian chờ đợi return_when cho biết khi nào hàm này sẽ trả về. Nó phải là một trong những hằng số sau Không thay đổi Sự mô tả import shutil with ThreadPoolExecutor(max_workers=4) as e: e.submit(shutil.copy, 'src1.txt', 'dest1.txt') e.submit(shutil.copy, 'src2.txt', 'dest2.txt') e.submit(shutil.copy, 'src3.txt', 'dest3.txt') e.submit(shutil.copy, 'src4.txt', 'dest4.txt')19 Hàm sẽ trả về khi bất kỳ tương lai nào kết thúc hoặc bị hủy import shutil with ThreadPoolExecutor(max_workers=4) as e: e.submit(shutil.copy, 'src1.txt', 'dest1.txt') e.submit(shutil.copy, 'src2.txt', 'dest2.txt') e.submit(shutil.copy, 'src3.txt', 'dest3.txt') e.submit(shutil.copy, 'src4.txt', 'dest4.txt')20 Hàm sẽ trả về khi bất kỳ tương lai nào kết thúc bằng cách đưa ra một ngoại lệ. Nếu không có tương lai nào phát sinh ngoại lệ thì nó tương đương với import shutil with ThreadPoolExecutor(max_workers=4) as e: e.submit(shutil.copy, 'src1.txt', 'dest1.txt') e.submit(shutil.copy, 'src2.txt', 'dest2.txt') e.submit(shutil.copy, 'src3.txt', 'dest3.txt') e.submit(shutil.copy, 'src4.txt', 'dest4.txt')21 import shutil with ThreadPoolExecutor(max_workers=4) as e: e.submit(shutil.copy, 'src1.txt', 'dest1.txt') e.submit(shutil.copy, 'src2.txt', 'dest2.txt') e.submit(shutil.copy, 'src3.txt', 'dest3.txt') e.submit(shutil.copy, 'src4.txt', 'dest4.txt')21 Chức năng sẽ trở lại khi tất cả các hợp đồng tương lai kết thúc hoặc bị hủy bỏ đồng thời. tương lai. as_completed(fs , hết thời gian chờ=None)¶Trả về một trình vòng lặp trên các phiên bản import shutil with ThreadPoolExecutor(max_workers=4) as e: e.submit(shutil.copy, 'src1.txt', 'dest1.txt') e.submit(shutil.copy, 'src2.txt', 'dest2.txt') e.submit(shutil.copy, 'src3.txt', 'dest3.txt') e.submit(shutil.copy, 'src4.txt', 'dest4.txt')4 (có thể được tạo bởi các phiên bản import shutil with ThreadPoolExecutor(max_workers=4) as e: e.submit(shutil.copy, 'src1.txt', 'dest1.txt') e.submit(shutil.copy, 'src2.txt', 'dest2.txt') e.submit(shutil.copy, 'src3.txt', 'dest3.txt') e.submit(shutil.copy, 'src4.txt', 'dest4.txt')0 khác nhau) được cung cấp bởi fs mang lại các hợp đồng tương lai khi chúng hoàn thành (tương lai đã hoàn thành hoặc bị hủy bỏ). Bất kỳ hợp đồng tương lai nào được đưa ra bởi fs bị trùng lặp sẽ được trả lại một lần. Bất kỳ hợp đồng tương lai nào hoàn thành trước khi import shutil with ThreadPoolExecutor(max_workers=4) as e: e.submit(shutil.copy, 'src1.txt', 'dest1.txt') e.submit(shutil.copy, 'src2.txt', 'dest2.txt') e.submit(shutil.copy, 'src3.txt', 'dest3.txt') e.submit(shutil.copy, 'src4.txt', 'dest4.txt')067 được gọi sẽ được tính trước. Trình lặp được trả về sẽ tăng một import shutil with ThreadPoolExecutor(max_workers=4) as e: e.submit(shutil.copy, 'src1.txt', 'dest1.txt') e.submit(shutil.copy, 'src2.txt', 'dest2.txt') e.submit(shutil.copy, 'src3.txt', 'dest3.txt') e.submit(shutil.copy, 'src4.txt', 'dest4.txt')6 nếu import shutil with ThreadPoolExecutor(max_workers=4) as e: e.submit(shutil.copy, 'src1.txt', 'dest1.txt') e.submit(shutil.copy, 'src2.txt', 'dest2.txt') e.submit(shutil.copy, 'src3.txt', 'dest3.txt') e.submit(shutil.copy, 'src4.txt', 'dest4.txt')7 được gọi và không có kết quả sau khi hết thời gian vài giây từ lệnh gọi ban đầu đến import shutil with ThreadPoolExecutor(max_workers=4) as e: e.submit(shutil.copy, 'src1.txt', 'dest1.txt') e.submit(shutil.copy, 'src2.txt', 'dest2.txt') e.submit(shutil.copy, 'src3.txt', 'dest3.txt') e.submit(shutil.copy, 'src4.txt', 'dest4.txt')067. thời gian chờ có thể là int hoặc float. Nếu thời gian chờ không được chỉ định hoặc import shutil with ThreadPoolExecutor(max_workers=4) as e: e.submit(shutil.copy, 'src1.txt', 'dest1.txt') e.submit(shutil.copy, 'src2.txt', 'dest2.txt') e.submit(shutil.copy, 'src3.txt', 'dest3.txt') e.submit(shutil.copy, 'src4.txt', 'dest4.txt')9, không có giới hạn về thời gian chờ đợi Xem thêm PEP 3148 – tương lai - thực hiện tính toán không đồng bộĐề xuất mô tả tính năng này để đưa vào thư viện chuẩn Python Các lớp ngoại lệ¶ngoại lệ đồng thời. tương lai. Lỗi bị hủy ¶Tăng lên khi một tương lai bị hủy bỏ ngoại lệ đồng thời. tương lai. Lỗi hết giờ ¶Bí danh không dùng nữa của import shutil with ThreadPoolExecutor(max_workers=4) as e: e.submit(shutil.copy, 'src1.txt', 'dest1.txt') e.submit(shutil.copy, 'src2.txt', 'dest2.txt') e.submit(shutil.copy, 'src3.txt', 'dest3.txt') e.submit(shutil.copy, 'src4.txt', 'dest4.txt')6, được nâng lên khi một hoạt động trong tương lai vượt quá thời gian chờ nhất định Đã thay đổi trong phiên bản 3. 11. Lớp này có bí danh là import shutil with ThreadPoolExecutor(max_workers=4) as e: e.submit(shutil.copy, 'src1.txt', 'dest1.txt') e.submit(shutil.copy, 'src2.txt', 'dest2.txt') e.submit(shutil.copy, 'src3.txt', 'dest3.txt') e.submit(shutil.copy, 'src4.txt', 'dest4.txt')6. ngoại lệ đồng thời. tương lai. Người thực thi bị hỏng ¶ Bắt nguồn từ import shutil with ThreadPoolExecutor(max_workers=4) as e: e.submit(shutil.copy, 'src1.txt', 'dest1.txt') e.submit(shutil.copy, 'src2.txt', 'dest2.txt') e.submit(shutil.copy, 'src3.txt', 'dest3.txt') e.submit(shutil.copy, 'src4.txt', 'dest4.txt')14, lớp ngoại lệ này được đưa ra khi một bộ thực thi bị hỏng vì một lý do nào đó và không thể được sử dụng để gửi hoặc thực thi các tác vụ mới Mới trong phiên bản 3. 7 ngoại lệ đồng thời. tương lai. InvalidStateError ¶Xảy ra khi một thao tác được thực hiện trên một tương lai không được phép ở trạng thái hiện tại Mới trong phiên bản 3. 8 ngoại lệ đồng thời. tương lai. chủ đề. BrokenThreadPool ¶Bắt nguồn từ import shutil with ThreadPoolExecutor(max_workers=4) as e: e.submit(shutil.copy, 'src1.txt', 'dest1.txt') e.submit(shutil.copy, 'src2.txt', 'dest2.txt') e.submit(shutil.copy, 'src3.txt', 'dest3.txt') e.submit(shutil.copy, 'src4.txt', 'dest4.txt')33, lớp ngoại lệ này được đưa ra khi một trong các công nhân của import shutil with ThreadPoolExecutor(max_workers=4) as e: e.submit(shutil.copy, 'src1.txt', 'dest1.txt') e.submit(shutil.copy, 'src2.txt', 'dest2.txt') e.submit(shutil.copy, 'src3.txt', 'dest3.txt') e.submit(shutil.copy, 'src4.txt', 'dest4.txt')05 khởi tạo không thành công Mới trong phiên bản 3. 7 ngoại lệ đồng thời. tương lai. quá trình. BrokenProcessPool ¶Bắt nguồn từ import shutil with ThreadPoolExecutor(max_workers=4) as e: e.submit(shutil.copy, 'src1.txt', 'dest1.txt') e.submit(shutil.copy, 'src2.txt', 'dest2.txt') e.submit(shutil.copy, 'src3.txt', 'dest3.txt') e.submit(shutil.copy, 'src4.txt', 'dest4.txt')33 (trước đây là import shutil with ThreadPoolExecutor(max_workers=4) as e: e.submit(shutil.copy, 'src1.txt', 'dest1.txt') e.submit(shutil.copy, 'src2.txt', 'dest2.txt') e.submit(shutil.copy, 'src3.txt', 'dest3.txt') e.submit(shutil.copy, 'src4.txt', 'dest4.txt')14), loại ngoại lệ này được nâng lên khi một trong những công nhân của import shutil with ThreadPoolExecutor(max_workers=4) as e: e.submit(shutil.copy, 'src1.txt', 'dest1.txt') e.submit(shutil.copy, 'src2.txt', 'dest2.txt') e.submit(shutil.copy, 'src3.txt', 'dest3.txt') e.submit(shutil.copy, 'src4.txt', 'dest4.txt')06 đã chấm dứt hợp đồng theo cách không trong sạch (ví dụ: nếu nó bị giết từ bên ngoài) Python có đợi tất cả các luồng kết thúc không?Giống như hầu hết các ngôn ngữ lập trình, trong Python cũng có các luồng. Mã thực thi tuần tự, nghĩa là mọi chức năng đợi chức năng trước đó hoàn thành trước khi có thể thực thi .
Phương thức đánh thức tất cả các luồng đang chờ điều kiện trong Python là gì?Phương pháp notifyAll() . Ở đây, phương thức notifyAll() được sử dụng để gửi thông báo cho tất cả các chuỗi đang chờ. Nếu tất cả các luồng đang chờ cập nhật đối tượng điều kiện thì notifyAll() sẽ sử dụng.
Phương pháp nào được sử dụng để đợi một luồng kết thúc Python?join() # Sẽ đợi một luồng cho đến khi nó hoàn thành nhiệm vụ của mình. Bạn cũng có thể cung cấp tham số thời gian chờ tính bằng giây (số thực được chấp nhận) cho phương thức join(). |