【问题标题】:How to use a module for "global" variables with multiprocessing?如何将模块用于具有多处理的“全局”变量?
【发布时间】: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。但是,这似乎很笨拙,欢迎任何如何更好地做到这一点的想法。

【问题讨论】:

标签: python module state python-multiprocessing


【解决方案1】:

您可以利用多处理的共享内存功能:

https://docs.python.org/3.9/library/multiprocessing.shared_memory.html

【讨论】:

  • 感谢建议,不知道3.8有这个新功能。看来我得升级了……
猜你喜欢
  • 2015-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-15
  • 2011-05-12
  • 1970-01-01
相关资源
最近更新 更多