Flask:创建保留在多个请求上的对象

Joh*_*ohn 5 python flask flask-restful

我已经能够创建在此链接的每个请求中创建的对象:http://flask.pocoo.org/docs/appcontext/#locality-of-the-context.

我实际上是在创建一个基于http://blog.miguelgrinberg.com/post/designing-a-restful-api-using-flask-restful的API .

我希望能够加载一次对象并让它返回一个已处理的响应,而不是在每次请求时加载它.该对象不是数据库,只需要取消大文件的取消.

我查看了文档,但我仍然对这整个Flask两个状态感到困惑.

Mar*_*ers 6

Flask上下文仅适用于每个请求.使用全局模块来存储您只想加载一次的数据.

您可以在启动时加载数据,作为全局:

some_global_name = load_data_from_pickle()
Run Code Online (Sandbox Code Playgroud)

支持多个进程的WSGI服务器可以分叉进程,也可以根据需要启动新的Python解释器.在分叉时,全局变量被复制到子进程.

您还可以使用before_first_request()hook将该数据加载到您的流程中; 只有在进程必须处理实际请求时才会调用此方法.这将在进程fork之后,为您的子进程提供唯一数据:

@app.before_first_request
def load_global_data():
    global some_global_name
    some_global_name = load_data_from_pickle()
Run Code Online (Sandbox Code Playgroud)