如何在 Python 中更新多处理中的全局计数器?



>我有一个用例,我同时运行两个while循环。两个循环都引用一个全局的计数器变量。一个循环更改计数器变量,另一个循环根据计数器的当前值执行某些功能。如果我使用threading模块,这个东西效果很好。但是由于某些性能下降,我被迫使用multiprocessing.

问题始于此。全局变量由 2 个进程中的任何一个保持不变。我知道这两个进程不像线程那样具有共享内存空间,因此它们的计数器值副本是不同的。所以,我的问题是,我怎样才能在两个函数之间传递该全局变量,就像我能够使用线程一样。下面是说明我的问题的代码示例 -

import multiprocessing as mp
def work1():
while True:
global temp
if temp==1:
print("value is 1")
else:
print("value is not 1")
def work2():
while True:
global temp
temp+=1
time.sleep(5)
temp-=1
time.sleep(5)
if __name__=='__main__':
global temp
temp=0
p1=mp.Process(target=work1)
p2=mp.Process(target=work2)
p1.start()
p2.start()

如您所见,我希望process-2每 5 秒更新一次全局变量temp。并且,process-1应打印全局变量的当前值temp

我知道传递全局变量是一个非常糟糕的代码设计。因此,我将临时变量的值写入进程 2 中的文件中,并在进程 1 中连续读取它。由于文件关闭/打开操作太多,这是一个更糟糕的想法。

我想复制上述功能,而无需读取/写入文件或使用全局变量(这不起作用)。请帮忙。

谢谢。

两个单独的进程不共享相同的全局变量,因此你会得到结果。我认为这应该有助于找到一种在进程之间共享变量的方法 https://docs.python.org/3/library/multiprocessing.html#sharing-state-between-processes

最新更新