multithreading - 多进程在进程之间共享内存
问题描述
我正在尝试通过从在多进程上运行的不同函数调用类的函数来更新类的变量。
为了达到预期的结果,流程(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}
解决方案
推荐阅读
- google-apps-script - 权限不足:应用脚本中的请求没有足够的身份验证范围错误,具有适当的范围调用 Directory API
- java - Java 8 Stream - 令牌“(”上的语法错误,此令牌后应有表达式
- c# - 扩展接口中的 C# 注释
- fluentvalidation - FluentValidation 记录验证器规则
- c - C问题中的快速排序
- javascript - 当我在以前的 iOS 上单击它的外部时,我的下拉菜单没有关闭
- wpf - WPF DataGrid 有时显示错误的颜色或字体
- google-analytics - 定义数字分析结构
- agda - 如何在 Agda 中正确定义带有参数的记录?
- c - 将 C 控制台程序屏幕中显示的内容发送到打印机