延伸

The main direction for asyncio extending is writing custom 事件循环 classes. Asyncio has helpers that could be used to simplify this task.

注意

Third-parties should reuse existing asyncio code with caution, a new Python version is free to break backward compatibility in internal part of API.

编写自定义事件循环

asyncio.AbstractEventLoop declares very many methods. Implementing all them from scratch is a tedious job.

A loop can get many common methods implementation for free by inheriting from asyncio.BaseEventLoop .

In turn, the successor should implement a bunch of private methods declared but not implemented in asyncio.BaseEventLoop .

例如, loop.create_connection() checks arguments, resolves DNS addresses, and calls loop._make_socket_transport() that should be implemented by inherited class. The _make_socket_transport() method is not documented and is considered as an internal API。

未来和任务私有构造函数

asyncio.Future and asyncio.Task should be never created directly, please use corresponding loop.create_future() and loop.create_task() ,或 asyncio.create_task() factories instead.

However, third-party 事件循环 may reuse built-in future and task implementations for the sake of getting a complex and highly optimized code for free.

For this purpose the following, private constructors are listed:

Future. __init__ ( * , loop = None )

创建内置未来实例。

loop is an optional event loop instance.

Task. __init__ ( coro , * , loop = None , 名称 = None , context = None )

创建内置任务实例。

loop is an optional event loop instance. The rest of arguments are described in loop.create_task() description.

3.11 版改变: context 自变量被添加。