首页 > 解决方案 > 有没有办法让两个进程共享同一个全局变量?

问题描述

我使用线程编写了一个程序,但由于它是 CPU 密集型的,线程实际上并没有带来任何性能提升,所以我开始研究多处理。到目前为止,我所有的代码都已经写好了,记住两个线程可以在同一个全局变量上工作,但据我所知,多处理是不可能的。

有没有办法在不重写我的整个代码的情况下做这样的事情?

我只需要在第二个过程中进行一些计算并更改一些变量的值。

我打算实现的一个简单示例:

target=list()
queue=list()

def func(a,b,target):
    temp=list()
    for i in range(0,a):
        for j in range(0,b)
            temp.append('a'+str(i)+'b'+str(j))
    target=list()
    
    
def process_func():
    go=True
    while go:
        target_=queue.pop(0)
        func(target[0],target[1],target[2])
        
if __name__=='__main__':
    p=multiprocessing.Process(target=process_func)
    p.start()

主要功能是将列表添加到队列中。我无法弄清楚如何做这样的事情。我的主要目标是以一种对现有代码进行最小更改的方式来执行此操作。

我虽然可以做的是使用多处理模块中的队列,但我不明白如何准确地实现它们,因为我能找到的教程会导致我的代码发生很大变化。

标签: pythonmultiprocessing

解决方案


https://docs.python.org/3/library/multiprocessing.html#sharing-state-between-processes

您可以在上面阅读很多内容。但是,如何在 Python 中使用多处理队列?解释了multiprocessing.Queue,在这种情况下,进程 A 和进程 B 应该被赋予队列对象作为输入以从相同的消费。


推荐阅读