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

Python中使用asyncio.get_running_loop()报错RuntimeError的解决方法

解决asyncio.get_running_loop()报错的问题

错误原因

asyncio.get_running_loop()的作用是获取当前线程中正在运行的事件循环,你的代码在调用它时,还没有启动任何事件循环,因此抛出RuntimeError: no running event loop。而旧的asyncio.get_event_loop()会在没有循环时自动创建一个新循环,这也是它被弃用的核心原因——行为不够明确,容易引发意外问题。

正确的使用方式

要正常使用asyncio.get_running_loop(),必须确保调用它时,当前上下文已经存在正在运行的事件循环。最推荐的现代asyncio写法是使用asyncio.run()作为程序入口,它会自动创建、运行并清理事件循环:

import asyncio

async def test():
    # 在异步函数内部调用get_running_loop(),此时事件循环已启动
    loop = asyncio.get_running_loop()
    # 可基于loop执行其他操作(比如添加后台任务等)
    for _ in range(3):
        print("Test")
        await asyncio.sleep(1)

# asyncio.run()自动管理事件循环的生命周期
asyncio.run(test())

运行这段代码会得到预期输出:

Test
Test
Test

手动管理循环的场景(不推荐)

如果确实需要手动控制事件循环的创建和运行(比如复杂多线程场景),可以先创建循环并启动它,再在异步上下文中获取:

import asyncio

async def test():
    loop = asyncio.get_running_loop()
    for _ in range(3):
        print("Test")
        await asyncio.sleep(1)

# 创建新事件循环并设为当前线程默认循环
loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)

try:
    # 启动循环并运行任务
    loop.run_until_complete(test())
finally:
    # 手动清理循环
    loop.close()

这种写法繁琐且容易出错,除非有特殊需求,否则优先使用asyncio.run()。

内容的提问来源于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.15 00:45:37