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

Nemo ASR与Sanic启动方法冲突RuntimeError问题求助

解决Nemo ASR与Sanic启动方法冲突的问题

问题根源在于Nemo ASR在模块导入阶段就已经将多进程启动方法设置为fork,而Sanic默认需要spawn方法。启动方法一旦被设置就无法修改(即使使用force=True也无效),你之前的设置代码都晚于Nemo的初始化操作,因此完全不起作用。

正确解决方案:提前设置启动方法

必须在导入Nemo任何模块之前,完成多进程启动方法的设置。这样Nemo初始化时会继承已设置的spawn方法,不会再强制改为fork。

示例代码:

import multiprocessing as mp

# 先设置启动方法,再导入Nemo和Sanic
try:
    mp.set_start_method('spawn', force=True)
except RuntimeError:
    pass

# 现在导入依赖模块
import nemo.collections.asr as nemo_asr
from sanic import Sanic

app = Sanic(__name__)

# 可在此添加ASR接口路由
@app.route("/asr", methods=["POST"])
async def asr_handler(request):
    # 编写你的ASR处理逻辑
    return json({"result": "处理完成"})

if __name__ == '__main__':
    app.run(debug=True)

如果你的代码依赖torch.multiprocessing,也可以用它来设置启动方法,效果一致:

import torch.multiprocessing as mp

try:
    mp.set_start_method('spawn', force=True)
except RuntimeError:
    pass

# 后续导入和初始化逻辑同上

注意事项

使用spawn启动方法时,主进程中的全局代码会在子进程中重新执行,因此所有需要初始化的资源(比如加载ASR模型)都应该放在if __name__ == '__main__':块内部,或者路由处理函数中按需加载,避免重复初始化导致资源浪费或错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 16:33:12