全球布尔值通过一个过程改变并影响另一个过程



我有2个具有相同布尔值的过程。该布尔值的更改对其他过程没有影响。

def func1():   # function wich changes the boolean
    global boolVar
    if(boolVar)
       boolVar = False
       ...
def func1():   # function wich have no effect on the change frm func1
    global boolVar
    if(boolVar)
    ...
boolVar = True # var in " if __name__ == "__main__": "
p1 = multiprocessing.Process(target=func1, args=(boolVar)) #my processes
p2 = multiprocessing.Process(target=func2, args=(boolVar))
p1.start()
p2.start()

我需要func1效果func2的更改。我该怎么做?

过程的内存彼此分开,而不是由Python而不是操作系统分开。这是出于安全原因。

您需要的内容称为解释性通信。由于您已经使用了multiprocessing库,请查看使用管道传递的消息

import multiprocessing
boolVar=False
def func1(_bool):   # function wich changes the boolean
    global boolVar
    if not boolVar:
       boolVar = True
def func2():   # function wich have no efffect on the change frm func1
    global boolVar
    if boolVar:
        print('worked!')

boolVar = True # var in " if __name__ == "__main__": "
p1 = multiprocessing.Process(target=func1, args=(boolVar,)) #my processes
p2 = multiprocessing.Process(target=func2)
p1.start()
p2.start()

$ python3 multi.py

工作!

流程在单独的内存空间中运行,这意味着无法共享全局变量。该文档具有标题为"共享状态"的部分,该过程在需要时讨论了一些围绕此方法的方法。

这是您问题中按照伪代码线应用的这些方法。它为整数使用'i'array类型代码,因为没有专门针对布尔值的代码 - 但这没关系,因为在Python Boolean中是int的子类。

请注意,如图所示,必须通过其value属性访问Value共享内存对象的当前值。这是因为它们被用作具有关联Lock的对象代理,以防止并发访问。必须做到这一点的开销可以大大减少从多处理本身中获得的任何收益,具体取决于您要做的事情。

import multiprocessing
import time
def func1(boolVar):
    if boolVar.value:
       boolVar.value = False
def func2(boolVar):
    time.sleep(1)  # For testing, give other process time to execute.
    print(bool(boolVar.value))  # Show current "truthiness".

if __name__ == '__main__':
    boolVar = multiprocessing.Value('i', True)  # Create value in shared memory.
    p1 = multiprocessing.Process(target=func1, args=(boolVar,))
    p2 = multiprocessing.Process(target=func2, args=(boolVar,))
    p1.start()
    p2.start()
    p1.join()
    p2.join()

相关内容

  • 没有找到相关文章

最新更新