如何 运行 flask 中 app.run() 之前的代码?
how to run the code before the app.run() in flask?
我是 flask.I 的新手,用 flask+gunicorn 配置了一个服务器。
调用 test.py
的代码文件是这样的:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def test():
return aa+"world!"
if __name__ == '__main__':
aa = "hello"
app.run()
运行 使用:gunicorn -b 0.0.0.0:8080 test:app
我打错了:NameError: name 'aa' is not defined.
我想要一些代码,例如 gunicorn 之前的变量 aa
运行ing。
怎么做?
在你的 @app.route
之前放入一个小块,你不需要问题中的最后一个块
@app.before_first_request
def _declareStuff():
global aa
aa='hello'
只需在文件的全局范围内在“__main__
”之外声明 aa
。
from flask import Flask
app = Flask(__name__)
@app.route('/')
def test():
return aa+"world!"
aa = "hello"
if __name__ == '__main__':
app.run()
if __name__ == '__main__':
块中的代码仅在 Python 代码作为脚本 运行 时执行,例如,从命令行执行。 Gunicorn 导入文件,所以在那种情况下 __main__
中的代码将不会被执行。
请注意,如果您打算修改 aa
的值,那么不同的请求会产生不同的结果,具体取决于每个 gunicorn 工作进程处理了多少请求。例如:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def test():
global counter
counter += 1
return "{} world! {}".format('aa', counter)
counter = 0
if __name__ == '__main__':
app.run()
运行 上面的脚本有多个 worker (gunicorn -w 2 ...
) 并向 URL 发出多个请求。您应该看到计数器并不总是连续的。
我是 flask.I 的新手,用 flask+gunicorn 配置了一个服务器。
调用 test.py
的代码文件是这样的:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def test():
return aa+"world!"
if __name__ == '__main__':
aa = "hello"
app.run()
运行 使用:gunicorn -b 0.0.0.0:8080 test:app
我打错了:NameError: name 'aa' is not defined.
我想要一些代码,例如 gunicorn 之前的变量 aa
运行ing。
怎么做?
在你的 @app.route
之前放入一个小块,你不需要问题中的最后一个块
@app.before_first_request
def _declareStuff():
global aa
aa='hello'
只需在文件的全局范围内在“__main__
”之外声明 aa
。
from flask import Flask
app = Flask(__name__)
@app.route('/')
def test():
return aa+"world!"
aa = "hello"
if __name__ == '__main__':
app.run()
if __name__ == '__main__':
块中的代码仅在 Python 代码作为脚本 运行 时执行,例如,从命令行执行。 Gunicorn 导入文件,所以在那种情况下 __main__
中的代码将不会被执行。
请注意,如果您打算修改 aa
的值,那么不同的请求会产生不同的结果,具体取决于每个 gunicorn 工作进程处理了多少请求。例如:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def test():
global counter
counter += 1
return "{} world! {}".format('aa', counter)
counter = 0
if __name__ == '__main__':
app.run()
运行 上面的脚本有多个 worker (gunicorn -w 2 ...
) 并向 URL 发出多个请求。您应该看到计数器并不总是连续的。