我有一个单一端点的烧瓶应用程序,如下所示(简化如下):
@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发送到flask端点的文本进行分类。我试着使用应用程序上下文来实现这一点,它在本地工作,但在heroku上不起作用。我目前的理解是,这是因为应用程序上下文没有在工作人员之间共享。如何让classify
端点访问模型加载器?你知道吗
编辑:我没有正确回答最初的问题。每个worker都应该运行main()
,因此应该可以在自己的应用程序上下文中访问model_loader
。然而,当我在heroku上运行这个时,我得到AttributeError: '_AppCtxGlobals' object has no attribute 'model_loader'
。heroku上的应用程序上下文是否不同?你知道吗
您不能一次将其加载到内存中,因为Heroku工作人员可能在完全不同的机器上。您需要在每个worker中运行此代码,或者将数据存储在任何进程都可以读取的位置。你知道吗
相关问题 更多 >
编程相关推荐