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

如何在Python中无休眠交替运行多个异步函数?

实现无休眠交替运行异步函数

问题根源

移除await asyncio.sleep(1)后函数串行执行,是因为异步协程只有遇到await表达式时,才会主动让出事件循环的控制权。没有这个让出点,第一个协程会一口气跑完所有循环,再轮到下一个,自然变成串行输出。

解决方案:主动让出控制权

要实现无休眠交替,只需要在每次打印后,用await asyncio.sleep(0)触发任务切换——这个调用不会产生实际的休眠等待,但会告诉事件循环:当前协程暂时可以停一下,让其他就绪的协程执行。

修改后的代码

import asyncio

async def test1():
    for _ in range(0, 3):
        print("Test1")
        await asyncio.sleep(0)  # 主动让出执行权

async def test2():
    for _ in range(0, 3):
        print("Test2")
        await asyncio.sleep(0)  # 主动让出执行权

async def test3():
    for _ in range(0, 3):
        print("Test3")
        await asyncio.sleep(0)  # 主动让出执行权

async def call_tests():
    await asyncio.gather(test1(), test2(), test3())

asyncio.run(call_tests())

输出结果

Test1
Test2
Test3
Test1
Test2
Test3
Test1
Test2
Test3

简单原理

asyncio.sleep(0)就是给事件循环发个信号:“我这轮操作完了,先让别的任务跑”,它不会浪费任何等待时间,只是利用异步调度机制实现任务交替。这样每个函数打印一次就交权,事件循环就会轮流调度三个函数,达到无休眠交替运行的效果。

内容的提问来源于stack exchange,提问作者Super Kai - Kazuya Ito

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 19:55:22