Flask中应用层级初始化深度学习模型:全局变量与Application Context选哪个?
结论
你当前的场景优先选择模块级全局变量方案,适配性远高于应用上下文方案。
具体说明
- 你目前「单独文件初始化模型再导入
app.py」的做法,本质已经是Python原生的模块级单例实现:Python的模块导入机制天然保证同一个模块只会被初始化一次,不管你在多少个地方导入这个模型对象,都只会复用同一份内存里的实例,完全可以避免每次接口调用重复加载模型的问题,不需要额外加global关键字声明,直接在接口函数里使用导入的模型对象即可。 - 应用上下文方案更适用于多Flask应用实例运行、需要把模型和应用生命周期强绑定、或者需要在蓝图/自定义扩展中统一访问应用级资源的场景,你的需求没有这些特殊要求的话,完全不需要额外增加复杂度用应用上下文存储模型。
注意事项
如果生产环境用Gunicorn、uWSGI等多worker部署,每个worker会独立加载一次模型实例,属于正常现象,控制worker数量在合理范围即可避免内存超限,和你选择的模型存储方案无关。
内容的提问来源于stack exchange,提问作者Woox
相关产品推荐
相关产品推荐

