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()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 AbstractEventLoopPolicy khô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 SelectorEventLoop trên Unix và ProactorEventLoop trê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, ProactorEventLoop hiệ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ăng RuntimeError nế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 DefaultEventLoopPolicy khô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 WindowsSelectorEventLoopPolicy khô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 WindowsProactorEventLoopPolicy khô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())