运行 在 Flask 中 app.py 之前的单个 .py 文件
Running a single .py file once before main app.py in Flask
是否可以运行 python 的 .py 文件或片段 一次
进行必要的 - 涉及大量数据 - 计算,保存到 tmp 文件,
然后让主 app.py 文件使用该 tmp 文件作为数据源,而不必每次有人在 Flask 中发出请求时都重新计算?
你可以试试这个:before_first_request
我给你看一个简单的例子:
from flask import Flask
app = Flask(__name__)
@app.before_first_request
def do_heavy_work():
print("work, work!")
@app.route('/')
def index():
return 'Hello, world.'
@app.route('/next')
def next():
return 'yoo'
if __name__ == '__main__':
app.run(debug=True)
你应该会发现 do_heavy_work
只调用了一次。
根据计算类型和流量,您可能希望使用像 Celery 这样的后台 worker/job 队列。 HTTP 请求的想法是让它们在 request/response 生命周期内尽可能快速和轻便。如果作为此循环的一部分,您正在为每个请求执行大量数据计算,那么您会减慢用户速度并且没有充分利用 HTTP 进程。
查看来自 Heroku on Celery
的这篇文章
是否可以运行 python 的 .py 文件或片段 一次
进行必要的 - 涉及大量数据 - 计算,保存到 tmp 文件,
然后让主 app.py 文件使用该 tmp 文件作为数据源,而不必每次有人在 Flask 中发出请求时都重新计算?
你可以试试这个:before_first_request
我给你看一个简单的例子:
from flask import Flask
app = Flask(__name__)
@app.before_first_request
def do_heavy_work():
print("work, work!")
@app.route('/')
def index():
return 'Hello, world.'
@app.route('/next')
def next():
return 'yoo'
if __name__ == '__main__':
app.run(debug=True)
你应该会发现 do_heavy_work
只调用了一次。
根据计算类型和流量,您可能希望使用像 Celery 这样的后台 worker/job 队列。 HTTP 请求的想法是让它们在 request/response 生命周期内尽可能快速和轻便。如果作为此循环的一部分,您正在为每个请求执行大量数据计算,那么您会减慢用户速度并且没有充分利用 HTTP 进程。
查看来自 Heroku on Celery
的这篇文章