我正在尝试在一个进程中设置一个全局变量,并从另一个进程中读取它。 这基本上就是我在做的事情:
from multiprocessing import Process
import time
rocket = 0
def func1():
global rocket
while rocket < 10:
rocket += 1
print("Func1: " + str(rocket))
time.sleep(5)
def func2():
while rocket < 10:
print ("Func2: " + str(rocket))
time.sleep(1)
if __name__=='__main__':
p1 = Process(target = func1)
p1.start()
p2 = Process(target = func2)
p2.start()
我认为这段代码应该做什么:
所以预期的输出应该是这样的:
Func1: 1
Func2: 1
Func2: 1
Func2: 1
Func2: 1
Func2: 1
Func1: 2
Func2: 2
Func2: 2
#... and so on
但实际输出如下:
Func1: 1
Func2: 0
Func2: 0
Func2: 0
Func2: 0
Func2: 0
Func1: 2
Func2: 0
Func2: 0
#... and so on
从func2打印'火箭'总是保持0
我在func1 as you should
中将'火箭'声明为全局变量我在这里缺少什么?
答案 0 :(得分:0)
您可以尝试设置global rocket = 0并删除该行
rocket = 0
答案 1 :(得分:0)
我终于明白了!
您不能按照我的意图使用全局变量。
而是使用队列在进程之间交换数据。
The docu has an example on this.
所以你可以这样做:
from multiprocessing import Process, Queue
import time
def func1(q):
q.put("FirstValue")
time.sleep(10)
q.put("SecondValue")
def func2(q):
time.sleep(5)
print ("Func2: " + str(q.get()))
time.sleep(15)
print ("Func2: " + str(q.get()))
if __name__=='__main__':
q = Queue()
p1 = Process(target = func1, args=(q,))
p1.start()
p2 = Process(target = func2, args=(q,))
p2.start()
打印哪些:
Func2: FirstValue
Func2: SecondValue