在Python中启动时避免全局变量和加载模型

时间:2017-05-26 01:40:10

标签: python flask

我意识到使用全局变量不是一个好的编码实践。我需要在启动时加载机器学习模型,这样我就不需要在每次请求时处理它。我有Flask来处理请求。但是我无法理解在Python启动时初始化变量的好习惯。在Java中,我想我的方法是以下列方式使用带有静态变量的类:

Class A{
   private ClassB classB;
   A() {
      //Load some file into memory
      classB = new ClassB();
      classB.x = //set from file
   }

   public static getClassB() {
    return classB;
   }
}


Is this something which is a good practice to follow in Python as well? I could then probably do something like

@app.route('/', methods=['GET'])
  def main():
     b = getClassB() ; //this time it shouldn't load
     score = b.predict()
     return score

 if __name__ == 'app':
    try:
        getClassB() //this will load once at startup
    except Exception,e :
        print 'some error'

1 个答案:

答案 0 :(得分:1)

如果没有某种全局性的话,很难做到这一点 - 除非您希望在每个请求的基础上加载模型,这显然不具备性能。

flask.g实际上是每个请求的上下文。

只需将其设置为init文件或主文件中的变量即可。丙氨酸:

app = Flask(__name__)
learning_model = load_learning_model()


@app.route('/', methods=['GET'])
def home():
    #here you can use the learning model however you like

学习模型可以是类或其他类型的实例。