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

时间:2016-10-17 14:57:59

标签: python heroku flask

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

@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上有所不同吗?

1 个答案:

答案 0 :(得分:0)

您无法将其加载到内存中一次,因为Heroku工作人员可能位于完全不同的计算机上。您需要在每个工作程序中运行此代码,或将数据存储在任何进程可以读取的位置。