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