编辑:下面提供的简单示例
我正在创建一个flask Web应用程序,它具有需要在后台运行的功能,并且需要访问该过程中的变量,但是这种情况没有发生。 它实际上是用于进度条。
我尝试使用multiprocessing.Value,但似乎该过程需要在if __name__=="__main__":
内部运行
在进入进度页面时,它显示为零,即使刷新了那么多也没有变化。
from multiprocessing import Process, Value
from flask import Flask
import time
app = Flask(__name__)
PROGRESS = Value('i', 0)
def background(n):
for a in range(100): #downloading (iter_content)
n.value = a
time.sleep(1)
@app.route("/")
def index():
Process(target=background, args=(Progress,)).start()
return "<a href='/progress'>Check progress</a>"
@app.route("/progress")
def progress():
return str(PROGRESS.value)
if __name__ == "__main__":
app.run(debug=True)
当我转到localhost:5000/progress
并刷新页面时,我希望看到数字从0变为100
编辑:
from multiprocessing import Value, Process
import time
def bg(n):
for s in range(100):
n.value = s
time.sleep(1)
n = Value('i', 0) # created a shared variable with value 0
# This works if process is under if __name__=="__main__" since I cant use
# that in flask web app.
Process(target=bg, args=(n,)).start()
while True:
print(n.value)
time.sleep(0.5)
# The n.value doesn't change, it stays on 0
# and it should have been changing from 0 to 100
在上面的示例中,我可以创建相同的场景。 希望每个人都能理解。
谢谢。