python - 有没有办法让一个类添加多处理共享值?
问题描述
我创建了一个类,其中所有功能都可以工作,并且可以放入不同的进程并进行编辑。除增值功能外,所有功能均有效。这是我的课:
class data(object):
def __init__(self):
Manager = multiprocessing.Manager()
self.lock = multiprocessing.Lock()
self.changeAmt = 0
self.jump = multiprocessing.Value(ctypes.c_float, 0.02)
self.has_best = multiprocessing.Value(ctypes.c_bool, False)
self.best_list = Manager.list()
self.command_original = 'start sequence'
self.command = multiprocessing.Value(ctypes.c_wchar_p, self.command_original)
self.get_best = multiprocessing.Value(ctypes.c_bool, False)
self.done = multiprocessing.Value(ctypes.c_bool, False)
def get(self, name, model):
self.model = model
if model != 'Array':
with multiprocessing.Lock():
exec('self.now = self.'+name)
return self.now.value
if self.model == 'Array':
exec('self.now = self.'+name)
return self.now
def edit(self, name, model, changeAmt):
self.changeAmt = changeAmt
if model != 'Array':
with multiprocessing.Lock():
exec('self.'+name+'.value = self.changeAmt')
if model == 'Array':
for i in range(len(changeAmt)):
exec('self.'+name+'.append(changeAmt[i])')
def addValue(self, name, value):
self.now = value
exec('self.'+name+' = self.now')
然后可以在主函数中正确使用这些代码行:
ult = data()
p1 = Process(target = try2, args=(ult,))
p1.start()
p2 = Process(target = nextTry, args=(ult,))
p2.start()
p1.join()
p2.join()
当我在代码中使用 addValue 函数时,第一个进程运行良好,并且可以在调用 get 函数时返回值。但是,当我为第二个进程调用 get 函数时,它失败了。我对解决方案的一个想法是使用多处理队列方法并让两个进程都增加价值。虽然,我有一种感觉,即使两个函数都添加了值,如果其中一个函数改变了值,它也不会改变。我想要完成的工作是可行的,还是应该从一开始就尝试初始化所有变量?
解决方案
我发现这样做的唯一方法是使用多处理字典,我在下面发布了初始化程序和创建者的工作示例。
def __init__(self):
Manager = multiprocessing.Manager()
self.allDict = Manager.dict()
self.allDict['status'] = 'nothing'
self.allDict['done'] = False
self.allDict['changeAmt'] = 0
self.allDict['command'] = 'start sequence'
self.allDict['get_best'] = False
那么如果你想添加一个常规值:
def addValue(self, name, value):
self.allDict[name] = value
老实说,这可能是经理字典的最初原因之一。无论如何,我希望如果有人需要这些信息并偶然发现这篇文章,它会有所帮助。
推荐阅读
- windows-10 - Windows 10 上虚拟 COM 端口上的 USB 访问之间的长时间暂停
- swift - 在 SwiftUI 中的文本字段或文本编辑器中获取突出显示的文本
- javascript - 如何使用 mustache 注入 html
- regex - 我可以在 DataGrip 中添加与 Python 命名参数字符串模式匹配的参数模式吗?
- python - 当第一个数字出现时如何在 Pandas 中拆分一列
- python - Python TCP劫持攻击在Linux上创建目录
- c++ - 将读取值从 txt 复制到向量
- r - 如何在 Sweave 中使输出可识别
- sql - 从文本中搜索过滤器值
- node.js - 无法使用 typescript 和 sass 构建 next.js 应用程序