python - 更新的类属性未反映在多处理功能中
问题描述
我有一个在 Windows 上运行的 Python 3.6.6 多处理函数
import multiprocessing as mp
class Foo:
def __new__(cls):
return None
name = 'apple'
@staticmethod
def worker():
print(f'Inside worker => {Foo.name}')
@staticmethod
def caller():
for _ in range(3):
p = mp.Process(target=Foo.worker)
p.start()
p.join()
if __name__ == '__main__':
Foo.name ='ball'
Foo.caller() # worker prints apple
Foo.worker() # prints ball
据我了解,在函数worker
中,类属性的值name
应该 ball
但实际上是apple
.
我为此寻找解释,但找不到任何解释。提前致谢。
解决方案
您的程序有 4 个进程:1 个主进程和 3 个子进程。您在main
进程中修改类属性,但任何新生成的进程都将使用类定义中的值再次加载该类。
线程和进程之间的主要区别在于共享内存。如果您使用Thread
s 而不是Process
es,您将看到它将使用修改后的类定义:
p = threading.Thread(target=Foo.worker)
推荐阅读
- c# - 清除 ListView 项目选择 Xamarin.Forms
- wordpress - 无法在 WordPress 中停用 TinyMCE 插件
- javascript - 使用扩展拉丁字母验证个人姓名的 REGEX 模式
- javascript - 这个应许会发生什么
- vba - Shell command is not executed
- python - 为什么 b'\x02' 与 Python 中的值 2 或 int(2) 不同?
- java - 使用向量汇编器(Java)在 Spark 中设置输入和输出的问题
- html - HTML-如何在浏览器中添加图标徽标
- linux - Docker从多个容器挂载到循环设备不工作只能挂载一个容器
- typo3 - Typo3 9.5 子类和外部表