我是关于flask的新手。我使用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.
我想要一些代码,比如变量aa
在gunicorn之前运行。
怎么做?
答案 0 :(得分:1)
在@app.route
之前放入一个小块,你不需要问题中的最后一个块
@app.before_first_request
def _declareStuff():
global aa
aa='hello'
答案 1 :(得分:0)
只需在文件的全局范围内在“aa
”之外声明__main__
。
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工作进程处理的请求数量,不同的请求可能会产生不同的结果。 e.g:
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()
使用多个工作程序(gunicorn -w 2 ...
)运行上述脚本,并向URL发出多个请求。您应该看到计数器并不总是连续的。