如何在使用并行编程时更改全局变量

时间:2018-05-31 11:00:29

标签: 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==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

如何将流程结果应用于全局变量?或者如何使用多处理运行此代码并获得运行简单威胁代码的答案?

1 个答案:

答案 0 :(得分:1)

当您使用线程时,两个(或更多)线程在同一进程中创建共享其内存(全局)。

当您使用多处理时,会创建一个全新进程,并且每个进程都会获得其自己的内存副本(全局变量)。< / p>

您可以查看多处理 Value/ArrayManager以允许伪全局变量,即共享对象。