在对heroku上的flask端点的请求之间共享全局信息

2024-04-26 00:27:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个单一端点的烧瓶应用程序,如下所示(简化如下):

@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上的应用程序上下文是否不同?你知道吗


Tags: text模型jsonapp应用程序getherokumodel
1条回答
网友
1楼 · 发布于 2024-04-26 00:27:11

您不能一次将其加载到内存中,因为Heroku工作人员可能在完全不同的机器上。您需要在每个worker中运行此代码,或者将数据存储在任何进程都可以读取的位置。你知道吗

相关问题 更多 >