Chính sách¶
Cảnh báo
Các chính sách không được dùng nữa và sẽ bị xóa trong Python 3.16. Người dùng được khuyến khích sử dụng chức năng asyncio.run() hoặc asyncio.Runner với loop_factory để sử dụng cách triển khai vòng lặp mong muốn.
Chính sách vòng lặp sự kiện là một đối tượng chung được sử dụng để lấy và đặt event loop hiện tại cũng như tạo các vòng lặp sự kiện mới. Chính sách mặc định có thể là replaced với built-in alternatives để sử dụng các cách triển khai vòng lặp sự kiện khác nhau hoặc được thay thế bằng custom policy có thể ghi đè các hành vi này.
Zz000zz nhận và thiết lập một vòng lặp sự kiện riêng cho mỗi context. Theo mặc định, đây là mỗi luồng, mặc dù các chính sách tùy chỉnh có thể định nghĩa context khác nhau.
Chính sách vòng lặp sự kiện tùy chỉnh có thể kiểm soát hành vi của get_event_loop(), set_event_loop() và new_event_loop().
Các đối tượng chính sách phải triển khai các API được xác định trong lớp cơ sở trừu tượng AbstractEventLoopPolicy.
Nhận và thiết lập chính sách¶
Các chức năng sau có thể được sử dụng để nhận và đặt chính sách cho quy trình hiện tại:
- asyncio.get_event_loop_policy()¶
Trả về chính sách toàn quy trình hiện tại.
Sắp loại bỏ từ phiên bản 3.14: Hàm
get_event_loop_policy()không được dùng nữa và sẽ bị xóa trong Python 3.16.
- asyncio.set_event_loop_policy(policy)¶
Đặt chính sách toàn quy trình hiện tại thành policy.
Nếu policy được đặt thành
None, chính sách mặc định sẽ được khôi phục.Sắp loại bỏ từ phiên bản 3.14: Hàm
set_event_loop_policy()không được dùng nữa và sẽ bị xóa trong Python 3.16.
Đối tượng chính sách¶
Lớp cơ sở chính sách vòng lặp sự kiện trừu tượng được định nghĩa như sau:
- class asyncio.AbstractEventLoopPolicy¶
Một lớp cơ sở trừu tượng cho các chính sách asyncio.
- get_event_loop()¶
Lấy vòng lặp sự kiện cho bối cảnh hiện tại.
Trả về một đối tượng vòng lặp sự kiện triển khai giao diện
AbstractEventLoop.Phương pháp này sẽ không bao giờ trả về
None.Thay đổi trong phiên bản 3.6.
- set_event_loop(loop)¶
Đặt vòng lặp sự kiện cho bối cảnh hiện tại thành loop.
- new_event_loop()¶
Tạo và trả về một đối tượng vòng lặp sự kiện mới.
Phương pháp này sẽ không bao giờ trả về
None.
Sắp loại bỏ từ phiên bản 3.14: Lớp
AbstractEventLoopPolicykhông được dùng nữa và sẽ bị xóa trong Python 3.16.
asyncio đi kèm với các chính sách tích hợp sau:
- class asyncio.DefaultEventLoopPolicy¶
Chính sách asyncio mặc định. Sử dụng
SelectorEventLooptrên Unix vàProactorEventLooptrên Windows.Không cần phải cài đặt chính sách mặc định theo cách thủ công. asyncio được định cấu hình để tự động sử dụng chính sách mặc định.
Thay đổi trong phiên bản 3.8: Trên Windows,
ProactorEventLoophiện được sử dụng theo mặc định.Thay đổi trong phiên bản 3.14: Phương thức
get_event_loop()của chính sách asyncio mặc định hiện tăngRuntimeErrornếu không có vòng lặp sự kiện nào được đặt.Sắp loại bỏ từ phiên bản 3.14: Lớp
DefaultEventLoopPolicykhông được dùng nữa và sẽ bị xóa trong Python 3.16.
- class asyncio.WindowsSelectorEventLoopPolicy¶
Chính sách vòng lặp sự kiện thay thế sử dụng triển khai vòng lặp sự kiện
SelectorEventLoop.sẵn có: Windows.
Sắp loại bỏ từ phiên bản 3.14: Lớp
WindowsSelectorEventLoopPolicykhông được dùng nữa và sẽ bị xóa trong Python 3.16.
- class asyncio.WindowsProactorEventLoopPolicy¶
Chính sách vòng lặp sự kiện thay thế sử dụng triển khai vòng lặp sự kiện
ProactorEventLoop.sẵn có: Windows.
Sắp loại bỏ từ phiên bản 3.14: Lớp
WindowsProactorEventLoopPolicykhông được dùng nữa và sẽ bị xóa trong Python 3.16.
Chính sách tùy chỉnh¶
Để triển khai chính sách vòng lặp sự kiện mới, bạn nên phân lớp DefaultEventLoopPolicy và ghi đè các phương thức mong muốn có hành vi tùy chỉnh, ví dụ::
lớp MyEventLoopPolicy(asyncio.DefaultEventLoopPolicy):
def get_event_loop(tự):
"""Lấy vòng lặp sự kiện.
Đây có thể là Không hoặc một phiên bản của EventLoop.
"""
loop = super().get_event_loop()
# Do cái gì đó có vòng lặp ...
vòng lặp trở lại
asyncio.set_event_loop_policy(MyEventLoopPolicy())