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

时间:2014-06-16 20:03:10

标签: 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两州的事情感到困惑。

1 个答案:

答案 0 :(得分:6)

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

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

some_global_name = load_data_from_pickle()

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

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

@app.before_first_request
def load_global_data():
    global some_global_name
    some_global_name = load_data_from_pickle()