当前位置:首页>python>3分钟搞懂 Python 的 async 异步编程

3分钟搞懂 Python 的 async 异步编程

  • 2026-09-02 18:57:56
3分钟搞懂 Python 的 async 异步编程

点击蓝字 关注我们

你是不是写过这样的代码:

import time

time.sleep(2)   # 程序卡住2秒,啥也干不了

这叫同步阻塞——程序在傻等。
如果这2秒是网络请求、读文件,完全可以先去干别的事,等结果回来再继续。
async 就是帮你做到这一点的。


async 是什么?

一句话:让函数可以“暂停等待”,同时让 Python 去执行其他任务。

  • async def → 定义一个异步函数(协程)
  • await → 在异步函数内部等待一个操作完成,期间不阻塞

最简单的例子

import asyncio

asyncdefsay_hello():
    print("开始")
await asyncio.sleep(1)   # 模拟异步 I/O
    print("1秒后结束")

asyncio.run(say_hello())

注意:不能用 time.sleep(1),那会卡死整个程序。必须用 await asyncio.sleep。


并发执行多个任务(核心价值)

同步版:3个任务,分别耗时3、2、1秒 → 总耗时 6秒

import time

deftask(n, sec):
    time.sleep(sec)
    print(f"任务{n}完成")

start = time.time()
task(1, 3)
task(2, 2)
task(3, 1)
print(time.time() - start)  # 约6秒

异步版:用 asyncio.gather 同时跑 → 总耗时 3秒(等于最慢那个)

import asyncio

asyncdeftask(n, sec):
await asyncio.sleep(sec)
    print(f"任务{n}完成")

asyncdefmain():
await asyncio.gather(
        task(1, 3),
        task(2, 2),
        task(3, 1),
    )

asyncio.run(main())  # 输出顺序 3→2→1,总耗时3秒

什么时候用 async?

✅ 适合:网络爬虫、Web接口、数据库查询、读写文件(I/O密集)
❌ 不适合:大量数学计算、图像处理(CPU密集)——那种要用多进程


两个最容易犯的错

  1. 忘了 await

    asyncdefget():
    return42

    result = get()          # 错:result是个协程对象,不是42
    result = await get()    # 对
  2. 在异步函数里用 time.sleep
    要用 await asyncio.sleep


总结

关键词
作用
async def
定义可暂停的函数
await
等待一个操作,同时让出控制权
asyncio.run()
启动异步程序
asyncio.gather()
并发跑多个任务

一句话记忆:

async 让程序在等待时不傻等,await 是“我先歇会儿,好了叫我”。

试试把 time.sleep 换成 await asyncio.sleep,你会打开新世界的大门 🚪

END

资料领取

关注公众号,后台回复“资料领取”或点击“资料领取”菜单即可免费获取“软件测试”、“Python开发”相关资料~

最新文章

随机文章