python异步
async/await
与 loop.run_in_executor()
的差异
在 Python 的 异步编程(asyncio) 中,async/await
和 loop.run_in_executor()
主要用于 非阻塞执行任务,但它们的工作方式和适用场景不同。以下是它们的核心区别:
1. async/await
(完全异步)
适用于 纯粹的异步函数,通常用于 I/O 操作,如:
- 网络请求(HTTP)
- 数据库查询(如
aiomysql
、asyncpg
) - 文件 I/O(如
aiofiles
) - 异步任务队列(如
asyncio.Queue
)
示例:async/await
import asyncioasync def async_task():print("任务开始")await asyncio.sleep(2) # 模拟异步 I/O 操作print("任务完成")async def main():await async_task()asyncio.run(main())
特点:
await asyncio.sleep(2)
不会阻塞主线程,在等待的同时可以执行其他任务。- 适用于 原生支持
async
的库(如httpx.AsyncClient
、aiomysql
)。 - 需要被
await