Python 类在多处理下保持“稳定”的基本属性是什么?

问题描述 投票:0回答:1

在 SageMath 中,我至少见过以下两个问题的案例。我们有一个函数,它构造并返回来自同一类的元素,并且当顺序调用它时,它会按预期工作。但是,当通过

multiprocessing
功能并行调用此函数时,返回的元素恰好来自底层类的不同实例。

SageMath 的 issue #37278 中描述了最近的示例。另一种是 在 Ask.sagemath.org 上描述的。

并非每个类都会在

multiprocessing
下以这种方式失败,无论元素是顺序构造还是并行构造,有些类都保持“稳定”。从上面链接的问题 #37278 来看,SageMath 的
Permutations
类是稳定的,而
PermutationGroup
类则不稳定。那些不稳定的人似乎错过了他们的定义。

问:类的基本属性是什么,使其在

multiprocessing
的使用下保持稳定?

python pickle python-multiprocessing sage
1个回答
0
投票

Python 类在多处理下保持“稳定”的一个基本属性是不变性。

在多处理中,当您生成多个进程时,每个进程都会获得自己单独的内存空间。如果您在进程之间传递可变类的实例,则由于不同进程的同时修改,存在数据损坏或意外行为的风险。

为了确保稳定性并防止多处理中出现问题,使用不可变对象或确保使用锁、信号量或队列等多处理同步原语正确同步共享数据结构至关重要。不可变对象在创建后无法修改,因此它们本质上可以安全地在进程之间共享,而不存在并发修改问题的风险。

Python 中的不可变对象包括元组、字符串、整数和冻结集。通过使用这些类型或创建您自己的不可变类,您可以确保您的数据在多处理环境中的多个进程中保持一致和稳定。

© www.soinside.com 2019 - 2024. All rights reserved.