0
我具有長頸瓶的應用程序有一個端點,就像這樣(以下簡化):共享跨請求全球信息到燒瓶端點在Heroku
@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
端點訪問模型加載器?
編輯:我沒有正確地說出最初的問題。每個工作人員應運行main()
,因此應該在其自己的應用程序上下文中訪問model_loader
。然而,當我在heroku上運行這個時,我得到了AttributeError: '_AppCtxGlobals' object has no attribute 'model_loader'
。 heroku上的應用程序環境是否有所不同?
我重新措辭我的第一個問題。我不需要在工人中分享模型。但是,工人似乎無法訪問他們在heroku上的'main'中加載的變量。 – LateCoder
你在哪裏給main調用? –
我有一個運行腳本的Procfile,如下所示:'web:gunicorn server:app'。該腳本包含對main()的調用,如原始文章所示。 – LateCoder