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

Flask应用中TotalSegmentator多线程报错:RuntimeError-未找到根路径

问题解决:Flask中多线程调用TotalSegmentator出现RuntimeError

问题根源

你遇到的错误是因为TotalSegmentator底层依赖的库使用了多进程,而Python在Windows/macOS默认的spawn多进程启动模式下,会重新执行主模块代码。你的Flask app实例创建代码(app = Flask(__name__))没有被if __name__ == '__main__':保护,导致子进程执行到这段代码时,模块名变为mp_main,Flask无法自动找到对应的root路径,从而抛出错误。

解决方案

方案1:用if __name__ == '__main__':保护Flask启动逻辑

将Flask app的初始化和启动代码放到主模块判断块中,避免子进程重复执行:

修改你的main.py结构:

from flask import Flask, redirect, url_for, request
from threading import Thread

def create_app():
    app = Flask(__name__)
    
    # 注册路由
    @app.route('/evaluation_page', methods=['POST'])
    def evaluation():
        models_path = 'processing/prediction/train_models'
        results_path = 'processing/prediction/prediction_result'
        selected_file = 'upload/' + request.form['selectedFile']
        n_folds = request.form['numberOfFolds']
        n_repeats = request.form['numberOfRepeats']

        segmentation_thread = Thread(target=totalsegmentator, args=(selected_file, 'processing/segmentation/result'))
        segmentation_thread.start()

        evaluation_thread = Thread(target=evaluate, args=(selected_file, models_path, results_path, int(n_folds), int(n_repeats)))
        evaluation_thread.start()
        return redirect(url_for('evaluation_page'))
    
    return app

# 仅在主进程初始化app
if __name__ == '__main__':
    app = create_app()
    app.run()

方案2:显式指定Flask的root_path

如果无法调整模块结构,可以在创建Flask app时,手动指定root路径,让Flask不需要依赖模块名查找:

import os
from flask import Flask

# 显式传入当前文件所在目录作为root_path
app = Flask(__name__, root_path=os.path.abspath(os.path.dirname(__file__)))

补充说明

  • 你使用的是Thread启动任务,但问题本质是TotalSegmentator内部触发了多进程,所以线程本身没问题,核心是解决子进程中Flask模块加载的冲突。
  • 若你在Linux/macOS环境下,也可以尝试将多进程启动方式改为fork(仅适用于类Unix系统),但不推荐作为跨平台方案:
    import multiprocessing
    multiprocessing.set_start_method('fork')
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 13:57:00