Bạn có thể tạo và sử dụng các trình quản lý bối cảnh không đồng bộ trong các chương trình asyncio bằng cách xác định một đối tượng triển khai các phương thức __aenter__() và __aexit__() dưới dạng coroutine Show
Trong hướng dẫn này, bạn sẽ khám phá cách tạo và sử dụng trình quản lý bối cảnh không đồng bộ trong Python Bắt đầu nào Mục lục Trình quản lý bối cảnh không đồng bộ là gìTrình quản lý bối cảnh không đồng bộ là một đối tượng Python triển khai các phương thức __aenter__() và __aexit__() Trước khi chúng tôi đi sâu vào chi tiết về các trình quản lý ngữ cảnh không đồng bộ, hãy xem xét các trình quản lý ngữ cảnh cổ điển Trình quản lý bối cảnhTrình quản lý ngữ cảnh là một đối tượng Python triển khai các phương thức __enter__() và __exit__()
Phương thức __enter__() xác định những gì xảy ra ở đầu một khối, chẳng hạn như mở hoặc chuẩn bị tài nguyên, như tệp, ổ cắm hoặc nhóm luồng Phương thức __exit__() xác định điều gì sẽ xảy ra khi thoát khỏi khối, chẳng hạn như đóng tài nguyên đã chuẩn bị
Trình quản lý ngữ cảnh được sử dụng thông qua biểu thức “with” Thông thường, đối tượng quản lý ngữ cảnh được tạo ở đầu biểu thức “with” và phương thức __enter__() được gọi tự động. Phần nội dung sử dụng tài nguyên thông qua đối tượng trình quản lý bối cảnh được đặt tên, sau đó phương thức __aexit__() được gọi tự động khi khối được thoát, thông thường hoặc thông qua một ngoại lệ Ví dụ 1 2 3 4 5 .. . # mở trình quản lý bối cảnh với Trình quản lý bối cảnh() như manager: # # đóng cửa tự động Điều này phản ánh một biểu thức thử cuối cùng Ví dụ 1 2 3 4 5 6 7 8 .. . #tạo đối tượng người quản lý = Trình quản lý ngữ cảnh() thử. người quản lý. __enter__() # cuối cùng. người quản lý. __exit__() Tiếp theo, chúng ta hãy xem các trình quản lý ngữ cảnh không đồng bộ Trình quản lý bối cảnh không đồng bộTrình quản lý ngữ cảnh không đồng bộ đã được giới thiệu trong “PEP 492 – Coroutines với cú pháp không đồng bộ và chờ đợi“ Họ cung cấp trình quản lý bối cảnh có thể bị treo khi vào và thoát
Các phương thức __aenter__ và __aexit__ được định nghĩa là coroutines và được chờ đợi bởi người gọi Điều này đạt được bằng cách sử dụng biểu thức “không đồng bộ với” Bạn có thể tìm hiểu thêm về biểu thức “async with” trong hướng dẫn
Như vậy, trình quản lý bối cảnh không đồng bộ chỉ có thể được sử dụng trong các chương trình asyncio, chẳng hạn như trong các cuộc gọi coroutines Tiếp theo, chúng ta hãy xem xét kỹ hơn sự khác biệt giữa trình quản lý bối cảnh cổ điển và không đồng bộ Trình quản lý bối cảnh so với Trình quản lý bối cảnh không đồng bộCả trình quản lý bối cảnh cổ điển và trình quản lý bối cảnh không đồng bộ đều có nhiều điểm chung Cả hai đều cố gắng đạt được hiệu ứng giống nhau của biểu thức lần thử cuối cùng với mã tối thiểu và giao diện được xác định rõ Trình quản lý bối cảnh cổ điển sử dụng các phương thức __enter__ và __exit__, trong khi trình quản lý bối cảnh không đồng bộ sử dụng các phương thức __aenter__ và __aexit__
Trình quản lý bối cảnh cổ điển có thể được sử dụng chung ở mọi nơi trong chương trình Python, trong khi trình quản lý bối cảnh không đồng bộ chỉ có thể được sử dụng trong các chương trình không đồng bộ, chẳng hạn như trong coroutines
Trình quản lý ngữ cảnh cổ điển được sử dụng thông qua biểu thức “with”, trong khi trình quản lý ngữ cảnh không đồng bộ được sử dụng thông qua biểu thức “async with”
Bây giờ chúng ta đã biết về trình quản lý bối cảnh không đồng bộ, hãy xem cách chúng ta có thể sử dụng chúng 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 Trình quản lý bối cảnh không đồng bộTrong phần này, chúng ta sẽ khám phá cách chúng ta có thể xác định, tạo và sử dụng trình quản lý bối cảnh không đồng bộ trong các chương trình asyncio của mình Xác định Trình quản lý bối cảnh không đồng bộChúng ta có thể định nghĩa một trình quản lý bối cảnh không đồng bộ là một đối tượng Python thực hiện các phương thức __aenter__() và __aexit__() Điều quan trọng là cả hai phương thức phải được xác định là coroutines bằng cách sử dụng “def async” và do đó phải trả về các giá trị đang chờ Ví dụ 1 2 3 4 5 6 7 8 9 10 11 # xác định trình quản lý bối cảnh không đồng bộ lớp AsyncContextManager. # nhập trình quản lý bối cảnh không đồng bộ không đồng bộ def __aenter__(self): # báo cáo thư in('>nhập trình quản lý ngữ cảnh')
# thoát khỏi trình quản lý bối cảnh không đồng bộ không đồng bộ def __aexit__(self, exc_type, exc, tb): # báo cáo thư in('>thoát khỏi trình quản lý bối cảnh') Bởi vì mỗi phương thức đều là coroutine, nên bản thân chúng có thể đang đợi coroutine hoặc tác vụ Ví dụ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 # xác định trình quản lý bối cảnh không đồng bộ lớp AsyncContextManager. # nhập trình quản lý bối cảnh không đồng bộ không đồng bộ def __aenter__(self): # báo cáo thư in('>nhập trình quản lý ngữ cảnh') # chặn trong giây lát chờ không đồng bộ. ngủ(0. 5)
# thoát khỏi trình quản lý bối cảnh không đồng bộ không đồng bộ def __aexit__(self, exc_type, exc, tb): # báo cáo thư in('>thoát khỏi trình quản lý bối cảnh') # chặn trong giây lát chờ không đồng bộ. ngủ(0. 5) Sử dụng Trình quản lý ngữ cảnh không đồng bộTrình quản lý ngữ cảnh không đồng bộ được sử dụng thông qua biểu thức “không đồng bộ với” Điều này sẽ tự động chờ các coroutine nhập và thoát, tạm dừng coroutine đang gọi khi cần Ví dụ 1 2 3 4 .. . # sử dụng trình quản lý bối cảnh không đồng bộ không đồng bộ với AsyncContextManager() as manager: # Như vậy, biểu thức “async with” và trình quản lý bối cảnh không đồng bộ nói chung chỉ có thể được sử dụng trong các chương trình asyncio, chẳng hạn như trong coroutines Bạn có thể tìm hiểu thêm về biểu thức “async with” trong hướng dẫn
Bây giờ chúng ta đã biết cách sử dụng trình quản lý ngữ cảnh không đồng bộ, hãy xem một số ví dụ đã hoạt động Bối rối với API mô-đun asyncio? Ví dụ về cách sử dụng Trình quản lý ngữ cảnh không đồng bộ theo cách thủ côngChúng ta có thể khám phá cách sử dụng trình quản lý bối cảnh không đồng bộ theo cách thủ công Trong ví dụ này, chúng tôi sẽ xác định trình quản lý ngữ cảnh không đồng bộ. Phương pháp vào và ra của người quản lý sẽ báo cáo một tin nhắn và ngủ trong giây lát. Các thông báo sẽ giúp chúng tôi biết khi nào các phương thức được thực thi liên quan đến mã chương trình của chúng tôi và sau đó ngủ để mô phỏng I/O bị chặn và cho thấy rằng các coroutine này có thể bị treo khi gọi các coroutine khác Trình quản lý bối cảnh không đồng bộ sẽ được sử dụng thủ công Nghĩa là, chúng ta sẽ gọi các phương thức nhập và thoát một cách rõ ràng, truy xuất các tệp có thể chờ từ các coroutines và chờ chúng trực tiếp Đây là một ví dụ tốt để cho thấy chính xác điều gì đang tự động xảy ra khi chúng ta sử dụng các kiểu sử dụng phổ biến hơn, chẳng hạn như biểu thức “không đồng bộ với” 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 32 33 34 35 36 37 #Trăn Siêu Nhanh. com # ví dụ về cách sử dụng trình quản lý bối cảnh không đồng bộ theo cách thủ công nhập asyncio
# xác định trình quản lý bối cảnh không đồng bộ lớp AsyncContextManager. # nhập trình quản lý bối cảnh không đồng bộ không đồng bộ def __aenter__(self): # báo cáo thư in('>nhập trình quản lý ngữ cảnh') # chặn trong giây lát chờ không đồng bộ. ngủ(0. 5)
# thoát khỏi trình quản lý bối cảnh không đồng bộ không đồng bộ def __aexit__(self, exc_type, exc, tb): # báo cáo thư in('>thoát khỏi trình quản lý bối cảnh') # chặn trong giây lát chờ không đồng bộ. ngủ(0. 5)
# định nghĩa một coroutine đơn giản async def custom_coroutine(): # tạo và sử dụng trình quản lý ngữ cảnh không đồng bộ người quản lý = AsyncContextManager() # được chờ để vào trình quản lý enter_awaitable = người quản lý. __aenter__() # đang chờ mục nhập chờ nhập_ chờ # thực thi phần thân in(f'trong trình quản lý'<) # có thể đợi để thoát khỏi trình quản lý exit_awaitable = người quản lý. __aexit__(Không có, Không có, None) # đang chờ thoát chờ thoát_ chờ
# bắt đầu chương trình asyncio không đồng bộ. chạy(custom_coroutine()) 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 main() coroutine chạy và tạo một thể hiện của lớp AsyncContextManager của chúng ta Tiếp theo, chúng ta gọi __aenter__() coroutine để lấy một đối tượng coroutine đang chờ Điều đáng chờ đợi sau đó được chờ đợi, tạm dừng quy trình chính () và thực thi quy trình nhập quy trình báo cáo một tin nhắn và ngủ trong giây lát main() coroutine tiếp tục và báo cáo một tin nhắn Sau đó, nó gọi __aexit__() coroutine để lấy một đối tượng coroutine đang chờ Điều đáng chờ đợi thứ hai này được chờ đợi, tạm dừng quy trình chính(), thực thi quy trình đăng ký sau đó báo cáo một tin nhắn và ngủ trong giây lát main() coroutine tiếp tục và kết thúc chương trình Ví dụ phi thực tế này làm nổi bật những gì đang tự động xảy ra ở hậu trường khi chúng ta sử dụng trình quản lý ngữ cảnh có biểu thức “không đồng bộ với”, chẳng hạn như trong phần tiếp theo 1 2 3 > vào trình quản lý ngữ cảnh trong người quản lý > thoát khỏi trình quản lý ngữ cảnh Tiếp theo, chúng ta sẽ xem cách sử dụng trình quản lý ngữ cảnh thông qua biểu thức “async with” 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ề Trình quản lý ngữ cảnh không đồng bộ và “không đồng bộ với”Chúng ta có thể khám phá cách sử dụng trình quản lý bối cảnh không đồng bộ thông qua biểu thức “async with” Trong ví dụ này, chúng tôi sẽ cập nhật ví dụ trên để sử dụng trình quản lý bối cảnh theo cách bình thường Chúng tôi sẽ sử dụng biểu thức “không đồng bộ với” và trên một dòng, tạo và nhập trình quản lý ngữ cảnh. Điều này sẽ tự động chờ phương thức nhập Sau đó, chúng tôi có thể sử dụng trình quản lý trong khối bên trong. Trong trường hợp này, chúng tôi sẽ chỉ báo cáo một tin nhắn Thoát khỏi khối bên trong sẽ tự động chờ phương thức thoát của trình quản lý bối cảnh Đối chiếu ví dụ này với ví dụ trước cho thấy mức độ nặng nề của biểu thức “async with” đối với chúng ta trong một chương trình asyncio 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 #Trăn Siêu Nhanh. com # ví dụ về trình quản lý bối cảnh không đồng bộ thông qua async với nhập asyncio
# xác định trình quản lý bối cảnh không đồng bộ lớp AsyncContextManager. # nhập trình quản lý bối cảnh không đồng bộ không đồng bộ def __aenter__(self): # báo cáo thư in('>nhập trình quản lý ngữ cảnh') # chặn trong giây lát chờ không đồng bộ. ngủ(0. 5)
# thoát khỏi trình quản lý bối cảnh không đồng bộ không đồng bộ def __aexit__(self, exc_type, exc, tb): # báo cáo thư in('>thoát khỏi trình quản lý bối cảnh') # chặn trong giây lát chờ không đồng bộ. ngủ(0. 5)
# định nghĩa một coroutine đơn giản async def custom_coroutine(): # tạo và sử dụng trình quản lý ngữ cảnh không đồng bộ không đồng bộ với AsyncContextManager() as manager: # báo cáo kết quả in(f'trong trình quản lý'<)
# bắt đầu chương trình asyncio không đồng bộ. chạy(custom_coroutine()) 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 main() coroutine chạy và tạo một thể hiện của lớp AsyncContextManager của chúng ta trong một biểu thức “async with” Biểu thức này tự động gọi phương thức enter và đợi coroutine. Một tin nhắn được báo cáo và quy trình đăng ký chặn trong giây lát main() coroutine tiếp tục và thực thi phần thân của trình quản lý bối cảnh, in một thông báo Khối được thoát và phương thức thoát của trình quản lý bối cảnh được chờ tự động, báo cáo một tin nhắn và ngủ một lúc Điều này làm nổi bật kiểu sử dụng bình thường cho trình quản lý ngữ cảnh không đồng bộ trong chương trình asyncio 1 2 3 > vào trình quản lý ngữ cảnh trong người quản lý > thoát khỏi trình quản lý ngữ cảnh Tiếp theo, chúng ta có thể xem điều gì sẽ xảy ra với trình quản lý bối cảnh không đồng bộ khi một ngoại lệ được đưa ra Choáng ngợp trước các API đồng thời của python? Ví dụ về Trình quản lý bối cảnh không đồng bộ có ngoại lệChúng ta có thể khám phá điều gì xảy ra với trình quản lý bối cảnh không đồng bộ khi một ngoại lệ được đưa ra trong khối bên trong Trong ví dụ này, chúng tôi sẽ cập nhật ví dụ trên sử dụng trình quản lý ngữ cảnh không đồng bộ thông qua biểu thức “không đồng bộ với” và đưa ra một ngoại lệ trong khối bên trong Mục tiêu của ví dụ này là để chỉ ra rằng bất kể khối bên trong của trình quản lý bối cảnh được thoát ra như thế nào, thì biểu thức “không đồng bộ với” sẽ đảm bảo rằng quy trình đăng ký thoát được chờ đợi và được thực thi 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ề trình quản lý ngữ cảnh không đồng bộ thoát với một ngoại lệ nhập asyncio
# xác định trình quản lý bối cảnh không đồng bộ lớp AsyncContextManager. # nhập trình quản lý bối cảnh không đồng bộ không đồng bộ def __aenter__(self): # báo cáo thư in('>nhập trình quản lý ngữ cảnh') # chặn trong giây lát chờ không đồng bộ. ngủ(0. 5)
# thoát khỏi trình quản lý bối cảnh không đồng bộ không đồng bộ def __aexit__(self, exc_type, exc, tb): # báo cáo thư in('>thoát khỏi trình quản lý bối cảnh') # chặn trong giây lát chờ không đồng bộ. ngủ(0. 5)
# định nghĩa một coroutine đơn giản async def custom_coroutine(): # tạo và sử dụng trình quản lý ngữ cảnh không đồng bộ không đồng bộ với AsyncContextManager() as manager: # báo cáo kết quả in(f'trong trình quản lý'<) # thất bại với ngoại lệ tăng Ngoại lệ('Đã xảy ra sự cố'<)
# bắt đầu chương trình asyncio không đồng bộ. chạy(custom_coroutine()) 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 main() coroutine chạy và tạo một thể hiện của lớp AsyncContextManager của chúng ta trong một biểu thức “async with” Biểu thức này tự động gọi phương thức enter và đợi coroutine. Một tin nhắn được báo cáo và quy trình đăng ký chặn trong giây lát main() coroutine tiếp tục và thực thi phần thân của trình quản lý bối cảnh, in một thông báo và đưa ra một ngoại lệ Ngoại lệ được nêu ra khiến khối trình quản lý bối cảnh bị thoát. Phương thức thoát của trình quản lý bối cảnh được chờ đợi tự động, báo cáo một tin nhắn và ngủ trong giây lát Sau đó, ngoại lệ chấm dứt vòng lặp sự kiện của chương trình asyncio Điều này nhấn mạnh rằng quy trình thoát của trình quản lý ngữ cảnh không đồng bộ được chờ đợi, bất kể khối bên trong của trình quản lý ngữ cảnh được thoát như thế nào, chẳng hạn như với một ngoại lệ chưa được xử lý 1 2 3 4 5 6 > vào trình quản lý ngữ cảnh trong người quản lý > thoát khỏi trình quản lý ngữ cảnh Traceback (cuộc gọi gần đây nhất cuối cùng)
Ngoại lệ. Điều xấu đã xảy ra Tiếp theo, chúng ta có thể xem xét các lỗi phổ biến khi sử dụng trình quản lý ngữ cảnh không đồng bộ Các lỗi thường gặp với Trình quản lý bối cảnh không đồng bộThường gặp khó khăn khi bắt đầu với các trình quản lý ngữ cảnh không đồng bộ Trong phần này, chúng ta sẽ tìm hiểu một số lỗi thường gặp khi sử dụng trình quản lý bối cảnh không đồng bộ và cách khắc phục chúng Bạn có lỗi nào không được liệt kê bên dưới không? Ví dụ về Trình quản lý ngữ cảnh không đồng bộ và Biểu thức “với”Chúng ta có thể khám phá điều gì sẽ xảy ra nếu cố gắng sử dụng trình quản lý bối cảnh không đồng bộ thông qua biểu thức “with” Trong ví dụ này, chúng tôi cập nhật ví dụ trên để sử dụng trình quản lý bối cảnh không đồng bộ một cách bình thường, ngoại trừ biểu thức “with” bị sai, thay vì biểu thức “async with” Điều này dự kiến sẽ dẫn đến lỗi vì AsyncContextManager của chúng tôi không triển khai giao diện trình quản lý ngữ cảnh, ví dụ:. g. phương thức __enter__() và sẽ đưa ra một ngoại lệ 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 #Trăn Siêu Nhanh. com # ví dụ về trình quản lý bối cảnh không đồng bộ thông qua with (kết quả là lỗi) nhập asyncio
# xác định trình quản lý bối cảnh không đồng bộ lớp AsyncContextManager. # nhập trình quản lý bối cảnh không đồng bộ không đồng bộ def __aenter__(self): # báo cáo thư in('>nhập trình quản lý ngữ cảnh') # chặn trong giây lát chờ không đồng bộ. ngủ(0. 5)
# thoát khỏi trình quản lý bối cảnh không đồng bộ không đồng bộ def __aexit__(self, exc_type, exc, tb): # báo cáo thư in('>thoát khỏi trình quản lý bối cảnh') # chặn trong giây lát chờ không đồng bộ. ngủ(0. 5)
# định nghĩa một coroutine đơn giản async def custom_coroutine(): # tạo và sử dụng trình quản lý ngữ cảnh không đồng bộ với AsyncContextManager() as manager: # báo cáo kết quả in(f'trong trình quản lý'<)
# bắt đầu chương trình asyncio không đồng bộ. chạy(custom_coroutine()) 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 main() coroutine chạy và tạo một thể hiện của lớp AsyncContextManager của chúng ta trong biểu thức “with” Điều này không thành công vì biểu thức “với” dự kiến sẽ thực thi phương thức __enter__() trên đối tượng, trong trường hợp này không tồn tại. Thay vào đó, chúng ta có phương thức __aenter__() Điều này dẫn đến AttributeError chấm dứt chương trình Ví dụ nêu bật rằng trình quản lý ngữ cảnh không đồng bộ không thể được sử dụng thông qua biểu thức “with” và phải được sử dụng thông qua biểu thức “async with” trong chương trình asyncio 1 2 3 Traceback (cuộc gọi gần đây nhất cuối cùng)
Lỗi thuộc tính. __đi vào__ Tiếp theo, chúng ta có thể xem xét việc cố gắng sử dụng trình quản lý bối cảnh không đồng bộ không trả về các giá trị đang chờ Ví dụ về Trình quản lý bối cảnh không đồng bộ không có AwaitablesChúng ta có thể khám phá điều gì sẽ xảy ra nếu chúng ta cố gắng sử dụng trình quản lý bối cảnh không đồng bộ được xác định bằng các hàm thay vì coroutine Trong ví dụ này, chúng ta sẽ sử dụng trình quản lý bối cảnh không đồng bộ một cách bình thường, ngoại trừ việc cập nhật định nghĩa của lớp để các phương thức nhập và thoát là các hàm Python, thay vì các coroutine Điều này sẽ gây ra lỗi vì biểu thức “không đồng bộ với” sẽ yêu cầu các giá trị có thể chờ đợi được trả về, thay vì giá trị trả về, e. g. một Không có 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ề trình quản lý ngữ cảnh không đồng bộ không có phần chờ (kết quả là lỗi) nhập asyncio
# xác định trình quản lý bối cảnh không đồng bộ lớp AsyncContextManager. # nhập trình quản lý bối cảnh không đồng bộ def __aenter__(self): # báo cáo thư in('>nhập trình quản lý ngữ cảnh')
# thoát khỏi trình quản lý bối cảnh không đồng bộ def __aexit__(self, exc_type, exc, tb): # báo cáo thư in('>thoát khỏi trình quản lý bối cảnh')
# định nghĩa một coroutine đơn giản async def custom_coroutine(): # tạo và sử dụng trình quản lý ngữ cảnh không đồng bộ không đồng bộ với AsyncContextManager() as manager: # báo cáo kết quả in(f'trong trình quản lý'<)
# bắt đầu chương trình asyncio không đồng bộ. chạy(custom_coroutine()) 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 main() coroutine chạy và tạo một thể hiện của lớp AsyncContextManager của chúng ta trong một biểu thức “async with” Điều này không thành công vì biểu thức “không đồng bộ với” thực thi để nhận một giá trị có thể chờ khi gọi __aenter__() coroutine, trong khi phương thức __aenter__() được triển khai như một hàm bình thường và trả về giá trị Không có Điều này nhấn mạnh rằng giao diện của trình quản lý bối cảnh không đồng bộ phải được triển khai bằng cách sử dụng các coroutine trả về các giá trị có thể chờ đợi 1 2 3 4 > vào trình quản lý ngữ cảnh Traceback (cuộc gọi gần đây nhất cuối cùng)
LoạiLỗi. 'không đồng bộ với' đã nhận được một đối tượng từ __aenter__ không triển khai __await__. Không có Loại Chức năng không đồng bộ Python là gì?Lập trình không đồng bộ trong Python. Lập trình không đồng bộ là một đặc điểm của các ngôn ngữ lập trình hiện đại cho phép ứng dụng thực hiện nhiều thao tác khác nhau mà không cần đợi bất kỳ thao tác nào .
Bạn có thể gọi một hàm async mà không cần chờ Python không?Quy tắc. không-async-không chờ đợi
. Functions marked async must contain an await or return statement.
Run_in_executor là gì?run_in_executor được dùng để quản lý chuỗi từ bên trong vòng lặp sự kiện . Để làm được điều này, nó cần bọc luồng vào một Tương lai, cần được gán cho một vòng lặp sự kiện (bằng cách này hay cách khác). Lý do phương thức được lưu trữ trực tiếp trong một đối tượng vòng lặp có lẽ là lịch sử. Nó cũng có thể đã được asyncio.
Không đồng bộ cho vòng lặp Python là gì?Biểu thức async for được dùng để duyệt một trình vòng lặp không đồng bộ . Nó là một câu lệnh vòng lặp for không đồng bộ. Một trình lặp không đồng bộ là một trình vòng lặp mang lại các giá trị có thể chờ đợi. trình lặp không đồng bộ. Một đối tượng triển khai các phương thức __aiter__() và __anext__(). |