御气篇-Day81 asyncio.run () 运行协程

0 次阅读 2026-10-20 09:26

📖 知识点

asyncio.run () 语法

 

asyncio.run(协程对象)

 

要点拆解:

  1. asyncio.run() 是 Python3.7 + 推荐的入口,自动创建事件循环,执行协程,执行结束后自动关闭循环。

  2. 传入的必须是协程对象,不是协程函数本身。

    • ✅ asyncio.run(study_task()) 函数加括号,得到协程对象

    • ❌ asyncio.run(study_task) 直接传函数名,报错

  3. 整个异步程序,一般只在最外层调用一次 asyncio.run (),作为程序入口。

完整基础示例

 

import asyncio

async def study_task():
    print("开始修炼御气术")
    await asyncio.sleep(2)
    print("御气修炼完毕")

# 启动协程,运行任务
asyncio.run(study_task())

 

运行输出

 

开始修炼御气术
# 等待2秒
御气修炼完毕

 

💡 流程梳理:async def定义协程函数 → study_task()生成协程对象 → asyncio.run(对象)启动事件循环,执行协程

⚠️ 高频踩坑提醒

  1. await 只能写在 async 函数内部,不能写在 run 外面

  2. asyncio.run () 会阻塞主线程,直到里面的协程全部执行完成

  3. 不要在已经运行的事件循环内部再次调用 asyncio.run ()

⚔️ Kata 实战任务

任务需求:

  1. 导入 asyncio

  2. 定义协程函数 query_task(name, wait),打印{name}开始查询,等待{wait}秒,await asyncio.sleep (wait),打印{name}查询完成

  3. 使用 asyncio.run () 运行 query_task("数据库查询A", 2)

参考代码

 

import asyncio

async def query_task(name, wait):
    print(f"{name}开始查询,等待{wait}秒")
    await asyncio.sleep(wait)
    print(f"{name}查询完成")

# 启动协程
asyncio.run(query_task("数据库查询A", 2))

 

运行输出:

 

数据库查询A开始查询,等待2秒
# 等待2秒
数据库查询A查询完成

 

🧠 思考题

  1. 如果写成 asyncio.run(query_task) 不加括号,运行会报错吗?为什么?

  2. asyncio.run 执行期间,主线程是卡住的吗?