Python 当从不同的函数调用时,全局变量具有不同的值
我试图在一个进程中设置一个全局变量,并从另一个进程中读取它。 这基本上就是我正在做的:Python 当从不同的函数调用时,全局变量具有不同的值,python,global-variables,Python,Global Variables,我试图在一个进程中设置一个全局变量,并从另一个进程中读取它。 这基本上就是我正在做的: 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 fu
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: 0
Func2: 0
Func2: 0
Func2: 0
Func2: 0
Func1: 2
Func2: 0
Func2: 0
#... and so on
从func2打印时,“火箭”始终保持为0
我在func1中将“rockets”声明为全局变量
我在这里遗漏了什么?您可以尝试设置global rocket=0并删除该行
rocket=0
我终于拿到了
你不能像我想的那样使用全局变量
而是使用队列在进程之间交换数据
所以你可以这样做:
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
可能重复的
Func2: FirstValue
Func2: SecondValue