Python 3.x 使用并行编程时如何更改全局变量

Python 3.x 使用并行编程时如何更改全局变量,python-3.x,parallel-processing,Python 3.x,Parallel Processing,我在代码中使用多处理来并行处理一些事情。实际上,在我的目标的一个简单版本中,我想通过两个不同的并行过程来更改一些全局变量 但是在代码运行的最后,从mp.Queue得到的结果是true,但是变量没有改变 下面是一个简单的代码版本: import multiprocessing as mp a = 3 b = 5 # define a example function def f(length, output): global a global b if length==

我在代码中使用多处理来并行处理一些事情。实际上,在我的目标的一个简单版本中,我想通过两个不同的并行过程来更改一些全局变量

但是在代码运行的最后,从mp.Queue得到的结果是true,但是变量没有改变

下面是一个简单的代码版本:

import multiprocessing as mp

a = 3
b = 5

# define a example function
def f(length, output):
    global a
    global b
    if length==5:
       a = length + a
       output.put(a)
    if length==3:
       b = length + b
       output.put(b)


if __name__ == '__main__':

     # Define an output queue
     output = mp.Queue()    

     # Setup a list of processes that we want to run
     processes = []
     processes.append(mp.Process(target=f, args=(5, output)))
     processes.append(mp.Process(target=f, args=(3, output)))

     # Run processes
     for p in processes:
         p.start()

     # Exit the completed processes
     for p in processes:
         p.join()

     # Get process results from the output queue
     results = [output.get() for p in processes]

     print(results)
     print ("a:",a)
     print ("b:",b)
答案就是打击:

[8, 8]
a: 3
b: 5
如何将过程的结果应用于全局变量?或者,我如何通过多处理运行此代码,并像运行简单的威胁代码一样获得答案

使用线程时,两个或多个线程将在同一进程中创建,并共享它们的全局内存

当您使用多处理时,会创建一个全新的进程,每个进程都有自己的内存全局副本


您可以查看multiprocessing Value/Array或Manager以允许伪全局对象,即共享对象。

谢谢您的回答,它解决了我的许多问题。在你解释的帮助下,我通读了代码。