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

2024-06-21

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 课程。 以下是有关它的一些信息:上下文当地人 http://werkzeug.pocoo.org/docs/0.10/local/

Example:

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()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Flask (WSGI) 中使用全局单例,我是否需要担心竞争条件? [复制] 的相关文章

随机推荐