我有一个带有单个端点的烧瓶应用程序,如下所示(简化如下):
@app.route('/classify', methods=['POST'])
def classify():
p = g.model_loader.get_model()
json = request.get_json()
text = json['text']
return p.classify(text)
def main():
model_loader = ResourceLoader()
with app.app_context():
g.model_loader = model_loader
app.run()
if __name__ == '__main__':
main()
应用程序需要在main
方法中将机器学习模型加载到内存中,然后使用该模型将通过POST发送的文本分类到烧瓶端点。我试图使用应用程序上下文来执行此操作,该上下文在本地工作,但不适用于heroku。我目前的理解是,这是因为应用程序上下文不是跨工作者共享的。如何赋予classify
端点访问模型加载器的权限?
编辑:我没有正确说出最初的问题。每个worker应该运行main()
,因此应该可以在自己的应用程序上下文中访问model_loader
。但是,当我在heroku上运行时,我得到AttributeError: '_AppCtxGlobals' object has no attribute 'model_loader'
。应用程序上下文在heroku上有所不同吗?
答案 0 :(得分:0)
您无法将其加载到内存中一次,因为Heroku工作人员可能位于完全不同的计算机上。您需要在每个工作程序中运行此代码,或将数据存储在任何进程可以读取的位置。