进程中的共享变量,并通过另一个函数进行访问

时间:2019-04-20 14:37:20

标签: python-3.x asynchronous flask multiprocessing

编辑:下面提供的简单示例

我正在创建一个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

在上面的示例中,我可以创建相同的场景。 希望每个人都能理解。

谢谢。

0 个答案:

没有答案