Chờ đợi () làm gì trong python?
Có thể đợi các điều kiện khác nhau, chẳng hạn như tất cả các nhiệm vụ phải hoàn thành, nhiệm vụ đầu tiên phải hoàn thành và nhiệm vụ đầu tiên không thành công với một ngoại lệ Show Trong hướng dẫn này, bạn sẽ khám phá cách đợi các tác vụ asyncio hoàn thành trong Python Bắt đầu nào Mục lục không đồng bộ là gì. Chờ đã()Có thể được sử dụng để chờ một tập hợp các tác vụ asyncio hoàn thành Nhớ lại rằng một tác vụ asyncio là một thể hiện của asyncio. Lớp nhiệm vụ bao bọc một coroutine. Nó cho phép một coroutine được lên lịch và thực thi một cách độc lập, và đối tượng Tác vụ cung cấp khả năng xử lý tác vụ để truy vấn trạng thái và nhận kết quả Bạn có thể tìm hiểu thêm về các tác vụ asyncio trong hướng dẫn
Hàm wait() cho phép chúng ta đợi một tập hợp các tác vụ được thực hiện Cuộc gọi chờ có thể được cấu hình để chờ các điều kiện khác nhau, chẳng hạn như tất cả các tác vụ đang được hoàn thành, tác vụ đầu tiên đã hoàn thành và tác vụ đầu tiên không thành công với một lỗi Tiếp theo, hãy xem cách chúng ta có thể sử dụng hàm wait() Chạy các vòng lặp của bạn bằng cách sử dụng tất cả các CPU, tải xuống cuốn sách MIỄN PHÍ của tôi để tìm hiểu cách thực hiện Cách sử dụng asyncio. Chờ đã()sự không đồng bộ. hàm wait() lấy một tập hợp các đối tượng đang chờ, điển hình là các đối tượng Tác vụ Đây có thể là một danh sách, lệnh hoặc tập hợp các đối tượng tác vụ mà chúng tôi đã tạo, chẳng hạn như thông qua các cuộc gọi đến asyncio. hàm tác vụ create() trong phần hiểu danh sách Ví dụ 1 2 3 .. . # tạo nhiều nhiệm vụ tác vụ = [asyncio. create_task(task_coro(i)) for i in range(10)] sự không đồng bộ. wait() sẽ không trả về cho đến khi đáp ứng một số điều kiện về tập hợp các tác vụ Theo mặc định, điều kiện là tất cả các nhiệm vụ đã được hoàn thành Hàm wait() trả về một bộ gồm hai bộ. Bộ đầu tiên chứa tất cả các đối tượng tác vụ đáp ứng điều kiện và bộ thứ hai chứa tất cả các đối tượng tác vụ khác chưa đáp ứng điều kiện Các tập hợp này được gọi là tập hợp “đã hoàn thành” và tập hợp “đang chờ xử lý” Ví dụ 1 2 3 .. . # đợi tất cả các nhiệm vụ hoàn thành xong, đang chờ xử lý = đang chờ asyncio.chờ đã(nhiệm vụ) Về mặt kỹ thuật, asyncio. wait() là một hàm coroutine trả về một coroutine Sau đó, chúng ta có thể đợi coroutine này sẽ trả về bộ dữ liệu Ví dụ 1 2 3 4 5 .. . # tạo quy trình chờ đợi wait_coro = asyncio. chờ đã(nhiệm vụ) # chờ đợi coroutine chờ đợi tuple = await wait_coro Điều kiện chờ đợi có thể được chỉ định bởi đối số “return_when” được đặt thành asyncio. ALL_COMPLETED theo mặc định Ví dụ 1 2 3 .. . # đợi tất cả các nhiệm vụ hoàn thành xong, đang chờ xử lý = đang chờ asyncio.chờ đã(nhiệm vụ, return_when . =asyncio.ALL_COMPLETED) Chúng ta có thể đợi nhiệm vụ đầu tiên được hoàn thành bằng cách đặt return_when thành FIRST_COMPLETED Ví dụ 1 2 3 .. . # đợi nhiệm vụ đầu tiên được hoàn thành xong, đang chờ xử lý = đang chờ asyncio.chờ đã(nhiệm vụ, return_when . =asyncio.FIRST_COMPLETED) Khi task đầu tiên hoàn thành và trả về done set, các task còn lại không bị hủy và tiếp tục thực hiện đồng thời Chúng tôi có thể đợi tác vụ đầu tiên thất bại với một ngoại lệ bằng cách đặt return_when thành FIRST_EXCEPTION Ví dụ 1 2 3 .. . # đợi tác vụ đầu tiên thất bại xong, đang chờ xử lý = đang chờ asyncio.chờ đã(nhiệm vụ, return_when . =asyncio.FIRST_EXCEPTION) Trong trường hợp này, tập đã hoàn thành sẽ chứa tác vụ đầu tiên không thành công với một ngoại lệ. Nếu không có tác vụ nào thất bại với một ngoại lệ, bộ hoàn thành sẽ chứa tất cả các tác vụ và hàm wait() sẽ chỉ trả về sau khi tất cả các tác vụ được hoàn thành Chúng tôi có thể chỉ định khoảng thời gian chúng tôi sẵn sàng đợi cho điều kiện nhất định thông qua đối số “hết thời gian chờ” tính bằng giây Nếu hết thời gian chờ trước khi điều kiện được đáp ứng, bộ nhiệm vụ được trả về với bất kỳ tập con nhiệm vụ nào đáp ứng điều kiện tại thời điểm đó, e. g. tập hợp con của các nhiệm vụ được hoàn thành nếu đợi tất cả các nhiệm vụ hoàn thành Ví dụ 1 2 3 .. . # đợi tất cả các tác vụ hoàn thành với thời gian chờ xong, đang chờ xử lý = đang chờ asyncio.chờ đã(nhiệm vụ, hết thời gian=3) Nếu hết thời gian chờ trước khi điều kiện được đáp ứng, một ngoại lệ sẽ không được đưa ra và các tác vụ còn lại sẽ không bị hủy Bây giờ chúng ta đã biết cách sử dụng asyncio. hàm wait(), hãy xem một số ví dụ đã hoạt động Bị nhầm lẫn bởi API mô-đun asyncio? Ví dụ về Chờ tất cả các tác vụChúng ta có thể khám phá cách đợi tất cả các tác vụ bằng cách sử dụng asyncio. Chờ đã() Trong ví dụ này, chúng tôi sẽ định nghĩa một coroutine nhiệm vụ đơn giản tạo ra một giá trị ngẫu nhiên, ngủ trong một phần giây, sau đó báo cáo một thông báo với giá trị được tạo Sau đó, coroutine chính sẽ tạo nhiều tác vụ trong danh sách hiểu với coroutine và sau đó đợi tất cả các tác vụ hoàn thành Ví dụ đầy đủ được liệt kê dưới đây 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 #Trăn Siêu Nhanh. com # ví dụ về việc đợi tất cả các nhiệm vụ hoàn thành từ ngẫu nhiên nhập ngẫu nhiên nhập asyncio
# coroutine để thực thi trong một nhiệm vụ mới async def task_coro(arg): # tạo giá trị ngẫu nhiên trong khoảng từ 0 đến 1 giá trị = ngẫu nhiên() # khối trong giây lát chờ asyncio. ngủ(giá trị) # báo cáo giá trị in(f'>nhiệm vụ {arg})
# quy trình chính không đồng bộ def chính(): # tạo nhiều tác vụ nhiệm vụ = [asyncio.create_task(task_coro(i)) for i in range(10)] # đợi tất cả tác vụ hoàn tất xong,đang chờ xử lý = await asyncio.chờ đã(nhiệm vụ) # báo cáo kết quả in('Tất cả đã xong')
# bắt đầu chương trình asyncio không đồng bộ. chạy(chính()) Chạy ví dụ trước tiên sẽ tạo main() coroutine và sử dụng nó làm điểm vào chương trình asyncio Sau đó, main() coroutine tạo một danh sách mười tác vụ trong phần hiểu danh sách, mỗi tác vụ cung cấp một đối số số nguyên duy nhất từ 0 đến 9 Sau đó main() coroutine bị treo và đợi tất cả các tác vụ hoàn thành Các nhiệm vụ thực hiện. Mỗi cái tạo ra một giá trị ngẫu nhiên, ngủ một lúc, sau đó báo cáo giá trị được tạo của nó Sau khi tất cả các nhiệm vụ đã được hoàn thành, main() coroutine sẽ tiếp tục và báo cáo một thông báo cuối cùng Ví dụ này nêu bật cách chúng ta có thể sử dụng hàm wait() để đợi một tập hợp các tác vụ được hoàn thành Đây có lẽ là cách sử dụng phổ biến nhất của chức năng Lưu ý rằng kết quả sẽ khác nhau mỗi khi chương trình được chạy do sử dụng các số ngẫu nhiên 1 2 3 4 5 6 7 8 9 10 11 > nhiệm vụ 5 được thực hiện với 0. 0591009105682192 > nhiệm vụ 8 được thực hiện với 0. 10453715687017351 > nhiệm vụ 0 được thực hiện với 0. 15462838864295925 > nhiệm vụ 6 được thực hiện với 0. 4103492027393125 > nhiệm vụ 9 được thực hiện với 0. 45567100006991623 > nhiệm vụ 2 được thực hiện với 0. 6984682905809402 > nhiệm vụ 7 được thực hiện với 0. 7785363531316224 > nhiệm vụ 3 được thực hiện với 0. 827386088873161 > nhiệm vụ 4 được thực hiện với 0. 9481344994700972 > nhiệm vụ 1 được thực hiện với 0. 9577302665040541 Tất cả đã được làm xong Tiếp theo, hãy xem cách chúng ta có thể đợi nhiệm vụ đầu tiên hoàn thành Khóa học Python Asyncio miễn phí Tải xuống bảng gian lận API asyncio của tôi và như một phần thưởng, bạn sẽ nhận được quyền truy cập MIỄN PHÍ vào khóa học email 7 ngày của tôi trên asyncio Khám phá cách sử dụng mô-đun asyncio của Python, bao gồm cách xác định, tạo và chạy các coroutine mới cũng như cách sử dụng non-blocking I/O Tìm hiểu thêm Ví dụ về chờ nhiệm vụ đầu tiênChúng ta có thể khám phá cách đợi tác vụ đầu tiên hoàn thành bằng cách sử dụng asyncio. Chờ đã() Trong ví dụ này, chúng tôi sẽ sử dụng lại cùng một coroutine nhiệm vụ đơn giản tạo ra một giá trị ngẫu nhiên, ngủ trong một phần giây, sau đó báo cáo một thông báo với giá trị được tạo Sau đó, quy trình đăng ký chính sẽ tạo nhiều tác vụ trong danh sách hiểu với quy trình đăng ký như trước. Sau đó, nó sẽ đợi nhiệm vụ đầu tiên hoàn thành Sau khi hoàn thành một nhiệm vụ, nhiệm vụ đó được truy xuất từ tập hợp các nhiệm vụ đã hoàn thành và thông tin chi tiết về nhiệm vụ đó được báo cáo Ví dụ đầy đủ được liệt kê dưới đây 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 #Trăn Siêu Nhanh. com # ví dụ về chờ nhiệm vụ đầu tiên hoàn thành từ ngẫu nhiên nhập ngẫu nhiên nhập asyncio
# coroutine để thực thi trong một nhiệm vụ mới async def task_coro(arg): # tạo giá trị ngẫu nhiên trong khoảng từ 0 đến 1 giá trị = ngẫu nhiên() # khối trong giây lát chờ asyncio. ngủ(giá trị) # báo cáo giá trị in(f'>nhiệm vụ {arg})
# quy trình chính không đồng bộ def chính(): # tạo nhiều tác vụ nhiệm vụ = [asyncio.create_task(task_coro(i)) for i in range(10)] # đợi tác vụ đầu tiên hoàn thành xong,đang chờ xử lý = await asyncio.chờ đã(nhiệm vụ, return_when . =asyncio.FIRST_COMPLETED) # kết quả báo cáo in('Xong') # hoàn thành nhiệm vụ đầu tiên đầu tiên = xong. bật() in(đầu tiên)
# bắt đầu chương trình asyncio không đồng bộ. chạy(chính()) Chạy ví dụ trước tiên sẽ tạo main() coroutine và sử dụng nó làm điểm vào chương trình asyncio Sau đó, main() coroutine tạo một danh sách mười tác vụ trong phần hiểu danh sách, mỗi tác vụ cung cấp một đối số số nguyên duy nhất từ 0 đến 9 Sau đó, main() coroutine bị treo và đợi tác vụ đầu tiên hoàn thành Các nhiệm vụ thực hiện. Mỗi cái tạo ra một giá trị ngẫu nhiên, ngủ một lúc, sau đó báo cáo giá trị được tạo của nó Ngay khi tác vụ đầu tiên hoàn thành, hàm wait() trả về và quy trình main() tiếp tục Tập hợp “xong” chứa một tác vụ duy nhất đã hoàn thành, trong khi tập hợp “đang chờ xử lý” chứa tất cả các tác vụ khác đã được cung cấp trong tập hợp cho hàm wait() Sau đó, một nhiệm vụ đã hoàn thành được truy xuất từ tập hợp “đã hoàn thành” và được báo cáo. Trạng thái được in của tác vụ xác nhận rằng thực sự nó đã được thực hiện Các tác vụ khác không bị hủy và tiếp tục chạy đồng thời. Quá trình thực hiện của chúng bị cắt ngắn do chương trình asyncio bị chấm dứt Ví dụ này nêu bật cách chúng ta có thể sử dụng hàm wait() để đợi tác vụ đầu tiên hoàn thành Lưu ý rằng kết quả sẽ khác nhau mỗi khi chương trình được chạy do sử dụng các số ngẫu nhiên 1 2 3 > nhiệm vụ 9 được thực hiện với 0. 04034360933451242 Xong Tiếp theo, hãy xem cách chúng ta có thể đợi tác vụ đầu tiên thất bại với một ngoại lệ Bị choáng ngợp bởi các API đồng thời python? Ví dụ về chờ đợi thất bại đầu tiênChúng ta có thể khám phá cách đợi tác vụ đầu tiên thất bại bằng cách sử dụng asyncio. Chờ đã() Trong ví dụ này, chúng tôi sẽ sử dụng lại cùng một coroutine nhiệm vụ đơn giản tạo ra một giá trị ngẫu nhiên, ngủ trong một phần giây, sau đó báo cáo một thông báo với giá trị được tạo Nhiệm vụ coroutine được cập nhật để có điều kiện nó sẽ thất bại với một ngoại lệ nếu giá trị được tạo dưới ngưỡng Coroutine chính sau đó sẽ tạo ra nhiều tác vụ. Sau đó, nó sẽ đợi tác vụ đầu tiên thất bại với một ngoại lệ Khi một tác vụ không thành công, nó sẽ được truy xuất từ tập hợp các tác vụ đã hoàn thành và thông tin chi tiết của nó được báo cáo Ví dụ đầy đủ được liệt kê dưới đây 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 #Trăn Siêu Nhanh. com # ví dụ về việc đợi tác vụ đầu tiên thất bại từ ngẫu nhiên nhập ngẫu nhiên nhập asyncio
# coroutine để thực thi trong một nhiệm vụ mới async def task_coro(arg): # tạo giá trị ngẫu nhiên trong khoảng từ 0 đến 1 giá trị = ngẫu nhiên() # khối trong giây lát chờ asyncio. ngủ(giá trị) # báo cáo giá trị in(f'>nhiệm vụ {arg}) # thất bại có điều kiện giá trị nếu value < 0. 5. tăng Ngoại lệ(f'Something bad happened in {arg}')
# quy trình chính không đồng bộ def chính(): # tạo nhiều tác vụ nhiệm vụ = [asyncio.create_task(task_coro(i)) for i in range(10)] # đợi tác vụ đầu tiên không thành công hoặc tất cả tác vụ hoàn thành xong,đang chờ xử lý = await asyncio.chờ đã(nhiệm vụ, return_when . =asyncio.FIRST_EXCEPTION) # kết quả báo cáo in('Xong') # nhiệm vụ đầu tiên không thành công đầu tiên = xong. bật() in(đầu tiên)
# bắt đầu chương trình asyncio không đồng bộ. chạy(chính()) Chạy ví dụ trước tiên sẽ tạo main() coroutine và sử dụng nó làm điểm vào chương trình asyncio Sau đó, main() coroutine tạo một danh sách mười tác vụ trong phần hiểu danh sách, mỗi tác vụ cung cấp một đối số số nguyên duy nhất từ 0 đến 9 Sau đó, main() coroutine bị treo và đợi tác vụ đầu tiên hoàn thành Các nhiệm vụ thực hiện. Mỗi cái tạo ra một giá trị ngẫu nhiên, ngủ một lúc, sau đó báo cáo giá trị được tạo của nó Theo điều kiện, một số tác vụ đưa ra một ngoại lệ nếu giá trị được tạo của chúng cao hơn giá trị ngưỡng. Có thể tất cả các tác vụ tạo ra một giá trị dưới ngưỡng và không có tác vụ nào đưa ra ngoại lệ, mặc dù tình huống này cực kỳ khó xảy ra Ngay khi tác vụ đầu tiên không thành công với một ngoại lệ, hàm wait() trả về và quy trình main() tiếp tục Tập hợp "đã hoàn thành" chứa một tác vụ duy nhất không thành công trước, trong khi tập hợp "đang chờ xử lý" chứa tất cả các tác vụ khác đã được cung cấp trong tập hợp cho hàm wait() Nhiệm vụ thất bại duy nhất sau đó được truy xuất từ bộ "đã hoàn thành" và được báo cáo. Trạng thái được in của tác vụ xác nhận rằng nó thực sự không thành công với một ngoại lệ trong trường hợp này Các tác vụ khác không bị hủy và tiếp tục chạy đồng thời. Quá trình thực hiện của chúng bị cắt ngắn do chương trình asyncio bị chấm dứt Ví dụ này nêu bật cách chúng ta có thể sử dụng hàm wait() để đợi tác vụ đầu tiên bị lỗi Lưu ý rằng kết quả sẽ khác nhau mỗi khi chương trình được chạy do sử dụng các số ngẫu nhiên 1 2 3 > nhiệm vụ 5 được thực hiện với 0. 13168449673381888 Xong Tiếp theo, hãy xem cách chúng ta có thể đợi các tác vụ có thời gian chờ Ví dụ về Chờ đợi với Thời gian chờChúng ta có thể khám phá cách đợi tất cả các tác vụ hoàn thành khi hết thời gian chờ bằng cách sử dụng asyncio. Chờ đã() Trong ví dụ này, chúng tôi sẽ sử dụng lại cùng một coroutine nhiệm vụ đơn giản tạo ra một giá trị ngẫu nhiên, ngủ trong một phần giây, sau đó báo cáo một thông báo với giá trị được tạo Sau đó, coroutine chính sẽ tạo nhiều tác vụ và đợi tất cả các tác vụ hoàn thành. Trong trường hợp này, thời gian chờ được chỉ định, đặt giới hạn trên cho thời gian người gọi sẵn sàng đợi Khi tất cả các nhiệm vụ đã hoàn thành hoặc hết thời gian chờ, các nhóm nhiệm vụ đã hoàn thành và đang chờ xử lý sẽ được trả về. Tổng số nhiệm vụ đã hoàn thành trong thời gian chờ sau đó được báo cáo Ví dụ đầy đủ được liệt kê dưới đây 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 #Trăn Siêu Nhanh. com # ví dụ về việc đợi tất cả các tác vụ được hoàn thành với thời gian chờ từ ngẫu nhiên nhập ngẫu nhiên nhập asyncio
# coroutine để thực thi trong một nhiệm vụ mới async def task_coro(arg): # tạo giá trị ngẫu nhiên trong khoảng từ 0 đến 10 giá trị = ngẫu nhiên() * 10 # khối trong giây lát chờ asyncio. ngủ(giá trị) # báo cáo giá trị in(f'>nhiệm vụ {arg})
# quy trình chính không đồng bộ def chính(): # tạo nhiều tác vụ nhiệm vụ = [asyncio.create_task(task_coro(i)) for i in range(10)] # đợi tất cả tác vụ hoàn tất xong,đang chờ xử lý = await asyncio.chờ đã(nhiệm vụ, hết thời gian=5) # báo cáo kết quả in(f'Xong, {len()
# bắt đầu chương trình asyncio không đồng bộ. chạy(chính()) Chạy ví dụ trước tiên sẽ tạo main() coroutine và sử dụng nó làm điểm vào chương trình asyncio Sau đó, main() coroutine tạo một danh sách mười tác vụ trong phần hiểu danh sách, mỗi tác vụ cung cấp một đối số số nguyên duy nhất từ 0 đến 9 Sau đó main() coroutine bị treo và đợi tất cả các tác vụ hoàn thành Nó chỉ định thời gian chờ là 5 giây. Đây là khoảng một nửa thời lượng của các nhiệm vụ dài nhất có thể được tạo Các nhiệm vụ thực hiện. Mỗi cái tạo ra một giá trị ngẫu nhiên trong khoảng từ 0 đến 10, ngủ trong số giây được tạo, sau đó báo cáo giá trị được tạo của nó Hết thời gian chờ và main() coroutine tiếp tục. Nó báo cáo một thông báo cho biết số lượng tác vụ đã được hoàn thành trong thời gian chờ, trong trường hợp này là 6 tác vụ Ví dụ này nêu bật cách chúng ta có thể sử dụng hàm wait() để đợi một tập hợp các tác vụ được hoàn thành với thời gian chờ Lưu ý rằng kết quả sẽ khác nhau mỗi khi chương trình được chạy do sử dụng các số ngẫu nhiên 1 2 3 4 5 6 7 > nhiệm vụ 7 được thực hiện với 0. 16485206249285955 > nhiệm vụ 0 được thực hiện với 0. 73241529734688 > nhiệm vụ 4 được thực hiện với 1. 1137310743743878 > nhiệm vụ 6 được thực hiện với 2. 396915437441108 > nhiệm vụ 5 đã hoàn thành với 3. 375537014759735 > nhiệm vụ 2 được thực hiện với 4. 821848023696365 Hoàn thành, 6 nhiệm vụ hoàn thành kịp thời Ví dụ về Chờ CoroutinesChúng ta có thể khám phá việc chờ coroutine thay vì tác vụ với asyncio. Chờ đã() Hàm wait() được sử dụng để hỗ trợ các coroutine cũng như các tác vụ. Nó đã được cập nhật để chỉ hỗ trợ các tác vụ Hỗ trợ cho coroutines trong hàm wait() không được dùng nữa tại thời điểm viết bài và sẽ dẫn đến Cảnh báo khấu hao trong Python 3. 10. Hỗ trợ này sẽ sớm bị xóa, trong Python 3. 11 Ví dụ dưới đây tạo một danh sách các coroutine và sau đó đợi tất cả chúng hoàn thành Nếu bạn đang sử dụng Python 3. 10 trở xuống, các coroutine được chuyển đổi thành các tác vụ và được lên lịch để thực hiện Ví dụ đầy đủ được liệt kê dưới đây 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 #Trăn Siêu Nhanh. com # ví dụ về việc đợi tất cả các coroutine hoàn thành từ ngẫu nhiên nhập ngẫu nhiên nhập asyncio
# coroutine để thực thi trong một nhiệm vụ mới async def task_coro(arg): # tạo giá trị ngẫu nhiên trong khoảng từ 0 đến 1 giá trị = ngẫu nhiên() # khối trong giây lát chờ asyncio. ngủ(giá trị) # báo cáo giá trị in(f'>nhiệm vụ {arg})
# quy trình chính không đồng bộ def chính(): # tạo nhiều coroutine tác vụ = [task_coro(i) for i in range(10)] # đợi tất cả tác vụ hoàn tất xong,đang chờ xử lý = await asyncio.chờ đã(nhiệm vụ) # báo cáo kết quả in('Tất cả đã xong')
# bắt đầu chương trình asyncio không đồng bộ. chạy(chính()) Chạy chương trình giả sử bạn đang sử dụng Python 3. 10 hoặc thấp hơn. Nếu không, xin vui lòng cho tôi biết kết quả bạn thấy trong các ý kiến dưới đây Trong trường hợp này, chúng ta có thể thấy rằng DeprecationWarning đã được báo cáo Ví dụ đầu tiên tạo main() coroutine và sử dụng nó làm điểm vào chương trình asyncio Sau đó, main() coroutine tạo một danh sách gồm mười coroutine (không phải tác vụ) trong phần hiểu danh sách, mỗi coroutine cung cấp một đối số số nguyên duy nhất từ 0 đến 9 Sau đó main() coroutine bị treo và đợi tất cả các coroutine hoàn thành. Hàm wait() chuyển đổi từng coroutine thành một Tác vụ, sau đó được lên lịch để thực hiện và sau đó được chờ đợi Các nhiệm vụ thực hiện. Mỗi cái tạo ra một giá trị ngẫu nhiên, ngủ một lúc, sau đó báo cáo giá trị được tạo của nó Sau khi tất cả các nhiệm vụ đã được hoàn thành, main() coroutine sẽ tiếp tục và báo cáo một thông báo cuối cùng Ví dụ này nêu bật cách chúng ta có thể sử dụng hàm wait() để đợi một tập hợp các coroutine hoàn thành Lưu ý rằng kết quả sẽ khác nhau mỗi khi chương trình được chạy do sử dụng các số ngẫu nhiên 1 2 3 4 5 6 7 8 9 10 11 12 13 Khấu haoCảnh báo. Việc chuyển rõ ràng các đối tượng coroutine sang asyncio. wait() không được dùng nữa kể từ Python 3. 8 và được lên lịch xóa trong Python 3. 11 |