<p>Python的“全局”概念实际上意味着“模块级”-没有进程范围的全局名称空间,<code>global</code>关键字的目标只是允许从函数中重新绑定模块级变量(这仍然被认为是错误的做法,除非真的没有其他解决方案,这种情况很少发生)</p>
<p>此外,您尤其不应该在wsgi应用程序中使用全局变量(我指可变全局变量)——这些应用程序通常作为多进程池中的长时间运行进程提供(在生产中),并且任何进程(通常是第一个非活动进程)都将为给定的请求提供服务,因此,您的可变全局状态1/将影响此流程提供的所有需求,2/不会在不同流程之间共享。所以,如果您想在进程之间共享状态,可以使用会话(用于易失性数据)或适当的数据库(用于peristant数据)</p>
<p>wrt/globals,作为一般规则,您通常可以使用简单的众所周知的编程特性来避免它们:函数参数、函数返回值和(如果您在非直接相邻的函数调用之间有状态共享)类</p>
<p>现在,如果您的变量是某个<strong>只读</strong>配置变量(这是可以的-这没有问题),那么在您的情况下,正确的解决方案是创建一个独特的配置模块,并在需要时导入它,即</p>
<p>config.py:</p>
<pre><code># naming convention: use ALL_UPPER for pseudo-constants
X = 42
</code></pre>
<p>webserver.py</p>
<pre><code>from flask import Flask
from flask import render_template
from flask import Response
import config
app = Flask(__name__)
@app.route('/')
def index():
print(config.X)
return render_template('index.html')
</code></pre>
<p>main.py</p>
<pre><code># note that this is your module, not the WebServer.WebServer class
# following naming conventions (module names should be all_lower)
# helps avoiding this kind of confusions
import WebServer
# contrived example, just to find a use for `config.X` here
import config
print("in main, config.X = {}".format(config.X)
# WSGI entry point
def main():
return WebServer.app
if __name__ == '__main__':
from DebugWebServer import DebugWebServer
server = DebugWebServer()
server.run(WebServer.app)
</code></pre>