我有一个用例,我同时运行两个while
循环。这些循环引用一个全局的计数器变量。一个循环改变计数器变量,另一个循环根据计数器的当前值执行某个功能。如果我使用threading
模块,这件事情很有用。但由于某些性能下降,我被迫使用multiprocessing
。
问题始于此。两个过程中的任何一个都保持全局变量不变。我知道这两个进程没有像线程一样的共享内存空间,因此它们的计数器值副本也不同。所以,我的问题是,如何在两个函数之间传递该全局变量,就像我能够使用线程一样。以下是用于说明我的问题的代码示例 -
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
的当前值。
我知道传递全局变量是一个非常糟糕的代码设计。所以,我在process-2中的文件中写入temp变量的值,并在process-1中连续读取它。由于文件关闭/打开操作太多,这是更糟糕的想法。
我想复制上面的功能,而不是读/写文件或使用全局变量(它不起作用)。请帮忙。
谢谢。
答案 0 :(得分:1)
两个单独的进程不共享相同的全局变量,因此得到的结果。我认为这应该有助于找到一种在流程https://docs.python.org/3/library/multiprocessing.html#sharing-state-between-processes
之间共享变量的方法