1. 核心函数
方法/函数 | 说明 | 示例 |
---|---|---|
asyncio.run(coro) |
运行异步主函数(Python 3.7+) | asyncio.run(main()) |
asyncio.create_task(coro) |
创建任务并加入事件循环 | task = asyncio.create_task(fetch_data()) |
asyncio.gather(*coros) |
并发运行多个协程 | await asyncio.gather(task1, task2) |
asyncio.sleep(delay) |
异步等待(非阻塞) | await asyncio.sleep(1) |
asyncio.wait(coros) |
控制任务完成方式 | done, pending = await asyncio.wait([task1, task2]) |
2. 事件循环(Event Loop)
方法 | 说明 | 示例 |
---|---|---|
loop.run_until_complete(future) |
运行直到任务完成 | loop.run_until_complete(main()) |
loop.run_forever() |
永久运行事件循环 | loop.run_forever() |
loop.stop() |
停止事件循环 | loop.stop() |
loop.close() |
关闭事件循环 | loop.close() |
loop.call_soon(callback) |
安排回调函数立即执行 | loop.call_soon(print, "Hello") |
loop.call_later(delay, callback) |
延迟执行回调 | loop.call_later(5, callback) |
3. 协程(Coroutine)与任务(Task)
方法/装饰器 | 说明 | 示例 |
---|---|---|
@asyncio.coroutine |
协程装饰器(旧版,Python 3.4-3.7) | @asyncio.coroutine def old_coro(): |
async def |
定义协程(Python 3.5+) | async def fetch(): |
task.cancel() |
取消任务 | task.cancel() |
task.done() |
检查任务是否完成 | if task.done(): |
task.result() |
获取任务结果(需任务完成) | data = task.result() |
4. 同步原语(类似threading
)
类 | 说明 | 示例 |
---|---|---|
asyncio.Lock() |
异步互斥锁 | lock = asyncio.Lock() async with lock: |
asyncio.Event() |
事件通知 | event = asyncio.Event() await event.wait() |
asyncio.Queue() |
异步队列 | queue = asyncio.Queue() await queue.put(item) |
asyncio.Semaphore() |
信号量 | sem = asyncio.Semaphore(5) async with sem: |
5. 网络与子进程
方法/类 | 说明 | 示例 |
---|---|---|
asyncio.open_connection() |
建立TCP连接 | reader, writer = await asyncio.open_connection('host', 80) |
asyncio.start_server() |
创建TCP服务器 | server = await asyncio.start_server(handle, '0.0.0.0', 8888) |
asyncio.create_subprocess_exec() |
创建子进程 | proc = await asyncio.create_subprocess_exec('ls') |
6. 实用工具
方法 | 说明 | 示例 |
---|---|---|
asyncio.current_task() |
获取当前任务 | task = asyncio.current_task() |
asyncio.all_tasks() |
获取所有任务 | tasks = asyncio.all_tasks() |
asyncio.shield(coro) |
保护任务不被取消 | await asyncio.shield(critical_task) |
asyncio.wait_for(coro, timeout) |
带超时的等待 | try: await asyncio.wait_for(task, 5) |