狭义上,asyncio 是指应用协程在 Python 中实现异步编程的能力。
具体来说,它指的是两个因素:
- 在 Python 3.4 中将“asyncio”模块增加到 Python 规范库中。
- 在 Python 3.5 中向 Python 语言增加了 async/await 表达式。
模块和语言的变动独特促成了反对基于协程的并发、非阻塞 I/O 和异步编程的 Python 程序的开发。
让咱们认真看看 asyncio 的这两个方面,从语言的变动开始。
1. 异步反对
Python 语言已更改为通过增加表达式和类型来适应 asyncio。更具体地说,它被更改为反对协程作为一流的概念。反过来,协程是 asyncio 程序中应用的并发单元。协程是一个能够挂起和复原的函数。
协程能够通过“async def”表达式定义。它能够承受参数并返回一个值,就像函数一样。
# define a coroutine
async def custom_coro():
# ...
调用协程函数会创立一个协程对象,这是一个新的类。它不执行协程函数。
...
# create a coroutine object
coro = custom_coro()
协程能够通过 await 表达式执行另一个协程。这会暂停调用者并安顿指标执行。
...
# suspend and schedule the target
await custom_coro()
异步迭代器是产生可期待对象的迭代器。能够应用“async for”表达式遍历异步迭代器。
...
# traverse an asynchronous iterator
async for item in async_iterator:
print(item)
这不会并行执行 for 循环。相同,执行 for 循环的调用协程将挂起并在外部期待迭代器产生的每个可期待对象。
异步上下文管理器是能够期待进入和退出办法的上下文管理器。“async with”表达式用于创立和应用异步上下文管理器。调用协程将在进入上下文管理器块之前挂起并期待上下文管理器,在来到上下文管理器块时也是如此。
这些是为反对协程而对 Python 语言进行的次要更改的总结。
2. 异步模块
“asyncio”模块提供函数和对象,用于应用异步编程范例开发基于协程的程序。具体来说,它反对带有子过程(用于执行命令)和流(用于 TCP 套接字编程)的非阻塞 I/O。
asyncio 模块的外围是事件循环。这是运行基于协程的程序并实现协程之间合作多任务处理的机制。该模块同时提供高级和低级 API。高级 API 是为咱们 Python 应用程序开发人员筹备的。在大多数状况下,低级 API 实用于框架开发人员,而不是咱们。大多数用例都能够应用高级 API 来满足,这些 API 提供实用程序来解决协程、流、同步原语、子过程和队列,以便在协程之间共享数据。较低级别的 API 为高级 API 提供了根底,包含事件循环的内部结构、传输协定、策略等。
当初咱们大抵理解了 asyncio 是什么,它用于异步编程。
本文由 mdnice 多平台公布