gpt4 book ai didi

python - 在 Flask (WSGI) 中使用全局单例,我是否需要担心竞争条件?

转载 作者:IT老高 更新时间:2023-10-28 20:55:21 35 4
gpt4 key购买 nike

Flask 的 hello world 演示是:

from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
return "Hello World!"

if __name__ == "__main__":
app.run()

如果我这样修改会怎样:

from flask import Flask
app = Flask(__name__)

a = 1
b = 2
c = 3

@app.route("/")
def hello():
a += 1
b += a
c += b
return "Hello World!"

if __name__ == "__main__":
app.run()

我了解 WSGI 应用程序可能有多个线程。 hello 函数可以同时在多个线程上运行,然后我们就会有一个竞争条件。这个对吗?如果上面的代码不是线程安全的,我该怎么做才能让它成为线程安全的?

避免使用全局变量是一种可能的解决方案,但您能始终避免使用全局变量吗?如果我想要 python 对象缓存之类的东西怎么办?

最佳答案

您可以尝试 werkzeug 的 Local 类(class)。这里有一些关于它的信息:Context Locals

例子:

from flask import Flask
from werkzeug.local import Local
app = Flask(__name__)
loc = Local()
loc.a = 1
loc.b = 2
loc.c = 3

@app.route("/")
def hello():
loc.a += 1
loc.b += loc.a
loc.c += loc.b
return "Hello World!"

if __name__ == "__main__":
app.run()

关于python - 在 Flask (WSGI) 中使用全局单例,我是否需要担心竞争条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10181706/

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