1 高层 API索引
列举了所有能用于 async/wait 的高层级asyncio API 集。运行异步任务如run()
, create_task()
;等待机制如gather()
, wait_for()
, shield()
;任务管理如current_task()
, all_tasks()
;队列和子进程功能;同步原语包括锁、事件和信号量。示例中涉及sleep()
, gather()
, wait_for()
, 子进程创建及同步异常TimeoutError
和`CancelledError
2 任务
运行异步程序,创建Task对象,等待多件事运行超时的公共集。
run()
创建事件循环,运行一个协程,关闭事件循环。
create_task()
启动一个asyncio的Task对象。
await sleep()
休眠几秒。
await gather()
并发执行所有事件的调度和等待。
await wait_for()
有超时控制的运行。
await shield()
屏蔽取消操作
await wait()
完成情况的监控器
current_task()
返回当前Task对象
all_tasks()
返回事件循环中所有的task对象。
Task
Task对象
to_thread()
在不同的 OS 线程中异步地运行一个函数。
run_coroutine_threadsafe()
从其他OS线程中调度一个协程。
for in as_completed()
用 for 循环监控完成情况。
3 例子
使用 asyncio.gather() 并行运行.
使用 asyncio.wait_for() 强制超时.
撤销协程.
asyncio.sleep() 的用法.
请主要参阅 协程与任务文档.
4 队列集
队列集被用于多个异步Task对象的运行调度,实现连接池以及发布/订阅模式。
先进先出队列
Queue
优先级队列:
PriorityQueue
后进先出队列:
LifoQueue
使用 asyncio.Queue 在多个并发任务间分配工作量.
5 子进程集
用于生成子进程和运行shell命令的工具包。
创建一个子进程:
await create_subprocess_exec()
运行一个shell命令:
await create_subprocess_shell()
比如使用 它执行一个shell命令.
请参阅 子进程 APIs 相关文档.
6 同步
能被用于Task对象集的,类似线程的同步基元组件。
互斥锁:
Lock
事件对象:
Event
条件对象:
Condition
信号量:
Semaphore
有界的信号量:
BoundedSemaphore
7 小结
使用异步库的例子
asyncio.Event 的用法.
请参阅asyncio文档 synchronization primitives.
异常
asyncio.TimeoutError
类似 wait_for() 等函数在超时时候被引发。请注意 asyncio.TimeoutError 与内建异常 TimeoutError 无关。
asyncio.CancelledError
当一个Task对象被取消的时候被引发。请参阅 Task.cancel()。
在取消请求发生的运行代码中如何处理CancelledError异常.
请参阅完整的 asyncio 专用异常 列表.
本文代码例子:
https://docs.python.org/zh-cn/3/library/asyncio-future.html#asyncio-example-future