You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python3 Asyncio代码无法并发执行,如何实现两个异步函数并行运行?

问题根因

Asyncio的协程是协作式调度,只有当前运行的协程主动让出执行权时,事件循环才会切换到其他待执行的协程。你写的test1、test2两个异步函数内部只有连续的打印逻辑,全程没有任何IO等待或者主动让出CPU的操作,所以第一个任务被调度后会一口气跑完整个循环才会释放执行权,第二个任务只能等第一个完全结束后才会运行,自然没有并行的特征。

修复方案

你只需要在循环内部加一行await asyncio.sleep(0),主动触发调度切换即可,修改后的代码如下:

import asyncio
import time

async def test1():
    for i in range(10):
        print(f"First function {i}")
        await asyncio.sleep(0) # 主动让出CPU,触发事件循环调度其他任务

async def test2():
    for i in range(10):
        print(f"Second function {i}")
        await asyncio.sleep(0)

async def main():
    print(f"started at {time.strftime('%X')}")
    F = asyncio.create_task(test1())
    S = asyncio.create_task(test2())
    tasks = (F, S)

    await asyncio.gather(*tasks)
    print(f"finished at {time.strftime('%X')}")

asyncio.run(main())

修改后运行就会看到两个函数的打印内容交替输出,符合你预期的并行执行效果。如果是真实业务场景,把asyncio.sleep(0)换成对应的异步IO操作(比如异步网络请求、异步文件读写)也会自动触发调度切换,不需要手动加sleep语句。

内容的提问来源于stack exchange,提问作者Garry Shnitzel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.15 00:27:02