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

Ray Workflows创建虚拟actor或运行工作流报错This event loop is already running

报错原因

该RuntimeError: This event loop is already running报错的核心是Ray Workflows的原生同步API(包括get_or_create、workflow.run等)内部会默认尝试启动一个全新的asyncio事件循环执行逻辑,如果你当前的运行环境已经存在正在运行的事件循环,二者就会发生冲突。
这种场景绝大多数出现在Jupyter Notebook、IPython这类自带运行时事件循环的交互式环境,也可能出现在你自己的代码已经手动启动了事件循环的场景。

可行解决方案
  • 方案1:替换为异步API调用
    将同步的get_or_create方法替换为异步版本get_or_create_async,将业务逻辑包裹在异步函数中执行,示例代码如下:
import asyncio
from ray import workflow

@workflow.virtual_actor
class ContextNode:
    def __init__(self):
        self.context = {}

    def put(self, key, value):
        self.context[key] = value

    @workflow.virtual_actor.readonly
    def get(self, key):
        return self.context[key]

workflow.init()

async def main():
    context = await ContextNode.get_or_create_async('context')
    # 此处可继续执行后续业务逻辑
    print("虚拟actor初始化完成")

if __name__ == "__main__":
    asyncio.run(main())
  • 方案2:兼容已有事件循环(适用于Jupyter等交互式环境调试场景)
    安装nest_asyncio库,开启事件循环嵌套支持,无需修改原有Ray业务代码,仅需要在调用Ray Workflows API前执行以下代码即可:
import nest_asyncio
nest_asyncio.apply()
  • 方案3:调整脚本执行逻辑
    如果是在普通Python脚本运行时触发该报错,检查你自己的代码是否提前启动了事件循环,要么将Ray Workflows的逻辑移到事件循环外执行,要么统一使用异步API在同一个事件循环内完成所有调用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 07:45:05