gpt4 book ai didi

python - 全局变量是 None 而不是实例 - Python

转载 作者:太空宇宙 更新时间:2023-11-04 08:58:11 25 4
gpt4 key购买 nike

我正在处理 Python 中的全局变量。代码应该可以正常工作,但是有一个问题。我必须为 Back 类的实例使用全局变量。当我运行应用程序时,它说 back is None 这应该不是真的,因为 setup() 函数中的第二行 - 'back = Back.Back()'

# -*- coding: utf-8 -*-
from flask import Flask
from flask import request
from flask import render_template


import Search
import Back

app = Flask(__name__)
global back
back = None

@app.route('/')
def my_form():
return render_template('my-form.html')

def setup():
global back
back = Back.Back()

def is_ascii(s):
return all(ord(c) < 128 for c in s)

@app.route('/', methods=['POST'])
def search():
from time import time

pattern = request.form['text']

startTime = time()

pattern=pattern.lower()

arr = []

if len(pattern)<1:
arr.append('Incorrect input')

currentTime = time()-startTime

return render_template('my-form.html', arr=arr, time=currentTime)


arr = []

search = Search.Search(pattern,back)
results = search.getResults()

..................

return render_template('my-form.html', arr=arr, time=currentTime, pattern=pattern)


app.debug=True
if __name__ == '__main__':
setup()
app.run()

为什么后面的变量是 None 而不是 Back 类的实例?谢谢

最佳答案

Flask 开发服务器运行您的模块两次。一次运行服务器本身,另一次在子进程中运行,这样每次您对其进行更改时它都可以重新加载整个脚本。 second 进程不会运行 __main__ protected 代码,全局保留为 None

如果你使用另一个 WSGI 服务器,你会遇到同样的问题;它会将您的文件作为模块导入,而不是作为初始脚本导入,并且 __main__ 守卫不会被执行。

使用 @app.before_first_request function反而;它保证在处理第一个请求时执行为此进程。如果您移动到使用多个子进程来扩展您的站点的适当 WSGI 容器,这也可以使您的全局正常工作:

@app.before_first_request
def setup():
global back
back = Back.Back()

关于python - 全局变量是 None 而不是实例 - Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28238478/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com