如何使用模块进行多处理"global"变量?



我正在使用模块具有许多模块级变量的常见模式,并且由其他模块导入,例如模块A,B,C ...等"有示例的模块级变量foo具有值" bar"。到目前为止,在单个过程环境中正常工作,并且可以导入模块和/或它的变量。我喜欢这种模式,它使代码变得清洁易读,并且IDE(例如Eclipse自动完成变量名称(。

然而,在多处理环境中,这不如Python文档中所述工作,因为每个过程都有一个具有不同地址空间的解释器。

现在,我想知道是否有通常可以接受这种模式与多处理作用的方法?也许有经理,价值或数组?

我的想法是使globalv.foo成为一个价值或经理实例,并将其传递给儿童过程和参数;我只为我的"全局"变量使用简单,可挑选的对象,例如整数和字符串。然后,当子进程运行时要做的第一件事是用父进程传递的foo替换子进程中的foo,这是一个值或经理实例。然后,它应该与父过程中的原始foo相同,并且应共享父母或子进程中的foo。但是,这似乎很笨拙,任何想法如何更好地欢迎。

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

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

最新更新