首页 > 解决方案 > 多进程在进程之间共享内存

问题描述

我正在尝试通过从在多进程上运行的不同函数调用类的函数来更新类的变量。

为了达到预期的结果,流程(p1)需要更新变量“事务”,然后流程(p2)应该修改它

我尝试了下面的代码,我知道我应该使用 Multiprocess.value 或 manager 来达到预期的结果,但我不确定如何去做,因为我要更新的变量在另一个类中

下面是代码:

from multiprocessing import Process
from helper import Helper
camsource = ['a','b'] 
Pros = []




def sub(i):
    HC.trail_func(i)


def main():

  for i in camsource:
     print ("Camera Thread {} Started!".format(i))
     p = Process(target=sub, args=(i))
     Pros.append(p)
     p.start()

  # block until all the threads finish (i.e. block until all function_x calls finish)    
  for t in Pros:
     t.join()


if __name__ == "__main__":
    HC = Helper()
    main()

这是帮助程序代码:

from __future__ import absolute_import
from __future__ import division
from __future__ import print_function

class Helper():
    def __init__(self):
        self.transactions = []

    def trail_func(self,preview):

        if preview == 'a':
            self.transactions.append({"Apple":1})
        else:
            if self.transactions[0]['Apple'] == 1:
                self.transactions[0]['Apple'] = self.transactions[0]['Apple'] + 1
            print (self.transactions)

期望的输出
p1::

transactions = {"Apple":1}

p2

transactions = {"Apple":2}

标签: multithreadingparallel-processingmultiprocessingpython-multiprocessingpython-multithreading

解决方案


我最近发布了这个模块,它可以帮助您编写代码,因为所有数据帧(可以保存任何类型数据的数据模型)都对它们进行了锁定,以解决并发问题。无论如何,请查看 README 文件和示例。

如果你想检查一下,我也在这里做了一个例子。


推荐阅读