道歉,如果这是一个重复,但是,我似乎无法理解围绕可变性的一些规则。我的场景类似于下面的场景:
from multiprocessing import Pool;
class myObj:
def __init__(self):
self.results = [];
def doThing(self):
self.results.append(1);
def wrapDoThing(o):
o.doThing();
return o;
objList = [myObj(),myObj()];
map(wrapDoThing,objList);
print(len(objList[0].results)); #prints 1
tPool = Pool(2);
tPool.map(wrapDoThing,objList);
print(len(objList[0].results)); #prints 1 - why?
我有一个具有实例字段的类,以及一个更新该实例字段的方法,从而更新对象状态。
如果我使用内置map
(我使用在顶级声明的函数作为包装器 - 稍后更清楚),方法调用将针对每个对象进行,并更新状态,如results
字段中所示该班的长度为1。
当我使用Pool.map
时(这就是为什么我使用了包装器,因为我不相信我可以使用lambda,可以吗?),该方法的效果似乎并不成立,并且我不确定为什么会这样?
答案 0 :(得分:0)
使用多处理,可以产生不同的python进程。
然而,主要的Python进程不会与新生成的进程共享它的状态(它们不会彼此共享)。
您传递给map的对象被序列化并发送到这些进程,但除了map的结果之外,它们从未返回到主进程。他们确实增加了,但仅限于后来以静脉死亡的其他过程: - (
如果您确实希望共享状态,则可以使用许多共享变量,内存和托管进程。
有关详情,请参阅multiprocessing's documentation。