【发布时间】:2019-07-02 10:08:54
【问题描述】:
我正在使用通用模式,其中一个模块具有多个模块级变量并由其他模块导入,例如模块 a、b、c...等导入模块“globalv”,例如,模块-level 变量 foo,值为 'bar'。到目前为止一切顺利,在单进程环境中按预期工作,并且可以导入模块和/或其变量。我喜欢这种模式,它使代码简洁易读,并且 Eclipse 等 IDE 会自动完成变量名。
但是,在多处理环境中,这并不像 python 文档中描述的那样工作,因为每个进程都有一个具有不同地址空间的单独解释器。
现在,我想知道是否有普遍接受的方法可以使这种模式与 multiprocessing 一起使用?也许与 Manager、Value 或 Array 一起使用?
我的想法是让 globalv.foo 成为一个 Value 或 Manager 实例,并将其作为参数传递给子进程;我只为我的“全局”变量使用简单的、可腌制的对象,例如整数和字符串。子进程运行时要做的第一件事就是将子进程中的 foo 替换为父进程传递的 foo,它是一个 Value 或 Manager 实例。然后它应该与父进程中的原始 foo 相同,并且应该共享父进程或子进程中的更新 foo。但是,这似乎很笨拙,欢迎任何如何更好地做到这一点的想法。
【问题讨论】:
-
使用
multiprocessing.Manager提供的dict可能是一个很好的模拟。见Sharing state between processes。
标签: python module state python-multiprocessing