Python 异步编程入门:从 async/await 说起

作者:

异步编程是现代编程中不可或缺的一部分。Python 3.5 引入的 async/await 语法让异步代码写起来像同步代码一样直观。

什么是异步编程

异步编程是一种非阻塞的编程方式。当程序需要等待 I/O 操作(如网络请求、文件读写)完成时,不需要停下来等待,而是可以先去做其他事情,等操作完成后再回来处理结果。

基本语法

定义协程

使用 async def 定义一个协程函数:

async def fetch_data(url):
    response = await aiohttp.get(url)
    return await response.json()

运行协程

使用 asyncio.run() 来运行顶层的协程:

import asyncio

async def main():
    data = await fetch_data("https://api.example.com")
    print(data)

asyncio.run(main())

并发执行

使用 asyncio.gather() 可以并发执行多个协程:

async def main():
    urls = ["url1", "url2", "url3"]
    tasks = [fetch_data(url) for url in urls]
    results = await asyncio.gather(*tasks)
    return results

这样三个请求会同时发出,总耗时约等于最慢的那个请求,而不是三个请求时间的总和。

实际应用场景

  • 网络爬虫:并发抓取多个页面,大幅提升效率
  • Web 服务器:如 FastAPI、Sanic 等框架基于异步编程
  • 数据库操作:异步数据库驱动如 asyncpg、motor

注意事项

异步编程虽然强大,但也有需要注意的地方:

  • 不要在异步代码中使用同步的 I/O 操作,会阻塞事件循环
  • 注意协程的异常处理,一个协程的异常可能导致 gather 整体失败
  • 合理控制并发数量,避免对目标服务器造成过大压力

异步编程是 Python 进阶的必经之路,掌握它将让你的程序更高效、更优雅。

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注