You need to enable JavaScript to run this app. Python中不用await如何运行async异步任务?create_task提交任务不执行怎么办
优惠活动
大模型
产品
解决方案
定价
更多

Python中不用await如何运行async异步任务?create_task提交任务不执行怎么办

任务未执行的核心原因
  • 调用loop.create_task(my_task())仅会将任务加入事件循环的待调度队列,并不会启动事件循环本身。你的代码中主线程执行完print("2222")后直接退出,事件循环还没来得及调度任务运行,程序就已经终止了。
  • 额外注意:你代码中使用的time.sleep(2)是同步阻塞方法,会卡住整个事件循环的所有任务执行,异步场景下需要替换为await asyncio.sleep(2)。
不手动await单个任务的正确运行方案

方案1:批量等待所有 pending 任务执行完成

如果你只是要提交多个后台任务,不需要逐个await,可收集事件循环中所有待执行任务,通过loop.run_until_complete一次性运行到所有任务结束:

import asyncio

async def my_task():
    print("starting my task...")
    await asyncio.sleep(2)
    print("finished my task.")


if __name__ == '__main__':
    print("1111")
    loop = asyncio.get_event_loop()
    loop.create_task(my_task())
    print("2222")
    # 启动事件循环,直到所有已提交的任务执行完成再退出
    loop.run_until_complete(asyncio.gather(*asyncio.all_tasks(loop)))
    loop.close()

运行输出:

1111
2222
starting my task...
finished my task.

方案2:长期运行事件循环(适合后台服务场景)

如果你的程序是需要持续运行的后台服务,可调用loop.run_forever()启动事件循环,循环会一直运行直到主动调用loop.stop():

import asyncio

async def my_task():
    print("starting my task...")
    await asyncio.sleep(2)
    print("finished my task.")
    # 任务完成后主动停止循环,可根据业务需求决定是否保留该逻辑
    loop.stop()

if __name__ == '__main__':
    print("1111")
    loop = asyncio.get_event_loop()
    loop.create_task(my_task())
    print("2222")
    # 事件循环持续运行,直到收到停止指令
    loop.run_forever()
    loop.close()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 17:54:01