如何在多处理中将模块用于“全局”变量?

时间:2019-07-02 10:08:54

标签: python module state python-multiprocessing

我正在使用一种通用模式,其中一个模块具有许多模块级变量,并由其他模块(例如,模块a,b,c ...)导入,等等。导入模块'globalv',例如,具有模块级变量foo,其值为“ bar”。到目前为止,它可以在单进程环境中按预期工作,并且可以导入模块和/或其变量。我喜欢这种模式,它使代码干净且易于阅读,并且诸如eclipse之类的IDE会自动完成变量名。

但是,在多处理环境中,这无法像python文档中所述那样工作,因为每个进程都有一个具有不同地址空间的单独解释器。

现在,我想知道是否存在使该模式与多处理一起工作的普遍接受的方法?也许使用Manager,Value或Array?

我的想法是使globalv.foo成为Value或Manager实例,并将其作为and参数传递给子进程。我只对“全局”变量使用简单的可腌制对象,例如整数和字符串。然后,子进程运行时要做的第一件事就是用父进程传递的foo(值或Manager实例)替换子进程中的foo。然后,它应该与父进程中的原始foo相同,并且应该共享父进程或子进程中的更新foo。但是,这似乎很笨拙,任何欢迎这样做的想法都值得欢迎。

1 个答案:

答案 0 :(得分:0)

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

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