【发布时间】:2022-01-12 21:11:46
【问题描述】:
假设我想让一个烧瓶服务器以相同的全局状态运行,该状态可能会通过请求进行修改。
也就是说,让初始的state 由数字5 表示。通过调用/getn,返回状态,通过/inc增加状态。
from flask import Flask
from flask import request
import time
import os
app = Flask(__name__)
state = 5
@app.route('/inc')
def inc():
global state
print("sleep")
time.sleep(5)
state += 1
return 'done'
@app.route('/getn')
def getn():
global state
return f"{state}"
if __name__ == '__main__':
app.run(threaded=True, host="0.0.0.0")
现在我同时从两个不同的终端呼叫curl http://127.0.0.1:5000/inc。在阅读了相同的博客后,我预计在完成两个调用后,/getn 会给我号码6,因为假设全局变量在烧瓶中不是线程安全的。但是,返回的状态等于7。
可以。解释这个?此外,执行此任务的正确方法是什么?
谢谢!
【问题讨论】:
-
仅供参考:在任何类型的软件中使用全局变量会使您的代码更难测试,也更难更改您的代码(如果需要更改的话)。当可以安全使用它们时,避免它们几乎总是更聪明。 stackoverflow.com/q/10525582/801894
标签: python multithreading flask global-variables