如何在Python的多处理中更新全局计数器?
我有一个用例,我同时运行两个如何在Python的多处理中更新全局计数器?,python,multithreading,concurrency,multiprocessing,global-variables,Python,Multithreading,Concurrency,Multiprocessing,Global Variables,我有一个用例,我同时运行两个,而循环。两个循环都引用一个全局计数器变量。一个循环更改计数器变量,另一个循环根据计数器的当前值执行特定功能。如果我使用线程模块,这件事会非常好用。但是由于某些性能下降,我不得不使用多处理 问题开始于此。这两个过程中的任何一个都保持全局变量不变。我知道这两个进程没有线程那样的共享内存空间,因此它们的计数器值拷贝是不同的。所以,我的问题是,如何像使用线程一样在两个函数之间传递全局变量。下面是说明我的问题的代码示例- import multiprocessing as m
,而循环。两个循环都引用一个全局计数器变量。一个循环更改计数器变量,另一个循环根据计数器的当前值执行特定功能。如果我使用线程
模块,这件事会非常好用。但是由于某些性能下降,我不得不使用多处理
问题开始于此。这两个过程中的任何一个都保持全局变量不变。我知道这两个进程没有线程那样的共享内存空间,因此它们的计数器值拷贝是不同的。所以,我的问题是,如何像使用线程一样在两个函数之间传递全局变量。下面是说明我的问题的代码示例-
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中将temp变量的值写入一个文件,并在进程1中不断读取它。这是一个更糟糕的想法,因为有太多的文件关闭/打开操作
我想复制上面的功能,而不用读/写文件或使用全局变量(这不起作用)。请帮忙
谢谢。两个单独的进程不共享相同的全局,因此您可以得到结果。我认为这应该有助于找到一种在进程之间共享变量的方法如果我没记错的话,您可以使用类似于multiprocessing.Queue的方法来共享变量。此外,该模块甚至应该有一个特殊类型的共享变量。当它们似乎在处理复杂的代码结构时,一切都超出了我的想象。如果你能给出一个参考我上面代码的例子,那将非常有帮助。