Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python的多处理中更新全局计数器?_Python_Multithreading_Concurrency_Multiprocessing_Global Variables - Fatal编程技术网

如何在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的方法来共享变量。此外,该模块甚至应该有一个特殊类型的共享变量。当它们似乎在处理复杂的代码结构时,一切都超出了我的想象。如果你能给出一个参考我上面代码的例子,那将非常有帮助。