Flask:创建在多个请求中保留的对象
我已经能够创建一些对象,这些对象会在每次请求时被创建,具体可以参考这个链接:http://flask.pocoo.org/docs/appcontext/#locality-of-the-context。
其实我是在根据这个链接创建一个API:http://blog.miguelgrinberg.com/post/designing-a-restful-api-using-flask-restful。
我希望能够加载一个对象一次,然后每次请求时都能返回处理好的响应,而不是每次都重新加载。这个对象不是数据库,只是需要解压一个大文件。
我查看了文档,但对于Flask的两种状态这个概念还是有点困惑。
1 个回答
11
Flask的上下文只在每次请求时有效。如果你有一些数据只想加载一次,可以使用模块级的全局变量来存储这些数据。
你可以在启动时就加载这些数据,作为全局变量:
some_global_name = load_data_from_pickle()
支持多进程的WSGI服务器会根据需要复制进程,或者启动一个新的Python解释器。当复制进程时,全局变量会被复制到子进程中。
你还可以使用before_first_request()
这个钩子来在你的进程中加载数据;这个钩子只有在进程需要处理实际请求时才会被调用。这是在进程复制之后进行的,这样你的子进程就会有独特的数据:
@app.before_first_request
def load_global_data():
global some_global_name
some_global_name = load_data_from_pickle()