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

如何在首个异步无限循环启动后运行第二个异步无限循环

解决异步循环延迟启动且独立运行的问题

你的示例代码存在两个核心问题,导致无法实现"两个循环独立运行"的需求:

  1. 使用time.sleep()会阻塞整个异步事件循环,所有任务都会暂停,而非仅当前任务休眠
  2. call_test()里的await task会让print_main()无限等待test()完成,但test()是无限循环,直接导致print_main()卡死

以下是修正后的代码,实现第一个循环立即启动,检测到特定条件后启动第二个循环,且两者完全独立执行:

import asyncio

async def test():
    while True:
        print("test")
        # 用异步睡眠替代阻塞式睡眠,仅暂停当前任务,不影响事件循环
        await asyncio.sleep(7)

async def print_main():
    # 标记test任务是否已启动,避免重复创建
    test_task_started = False
    while True:
        print("main")
        # 这里替换成你的"特定情况"检测逻辑,示例为首次运行就启动test
        if not test_task_started:
            # 创建并启动test任务,无需await,让它独立运行
            asyncio.create_task(test())
            test_task_started = True
        # 异步休眠,不阻塞其他任务
        await asyncio.sleep(5)

def main():
    asyncio.run(print_main())

if __name__ == '__main__':
    main()

关键细节说明:

  • 必须用asyncio.sleep()替代time.sleep():前者是异步非阻塞的,只会让当前任务暂停,其他任务仍能正常执行
  • 启动第二个任务时不要await:asyncio.create_task()会将任务加入事件循环队列独立运行,调用方可以继续执行自己的逻辑
  • 启动标记test_task_started:防止重复创建同一任务,根据你的需求调整触发条件即可(比如监听某个变量、外部信号等)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 21:30:58