如何通过多重处理来改变原始对象的状态?

2024-06-16 10:47:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我想我理解这个问题,当一个multiprocessing.Pool.map工作线程获取它的下一个赋值时,参数会根据文档作为一个选择的对象传递。如果返回值是您要查找的值,这是可以的,但是如果我想调用一个函数来并行地改变对象的状态,该怎么办?例如,考虑一个简单的对象:

from multiprocessing import Pool

class state():
    def __init__(self):
        self.z = 0
    def __repr__(self): 
        return "%s"%self.z
    def compute(self):
        print "Computing"
        self.z += 1

以及对该对象的一些操作:

^{pr2}$

输出为:

[0, 0, 0]
Computing
[0, 0, 1]
Computing
Computing
Computing
[1, 1, 2]
Computing
Computing
Computing
[1, 1, 2]

但我希望最后一行是[2, 2, 3]。显然,compute被调用了,但是结果对象被丢弃了。我如何“维持国家”?在


Tags: 对象函数文档selfmap参数状态def
1条回答
网友
1楼 · 发布于 2024-06-16 10:47:30

不能。酸洗不允许将状态更改发送回pickled对象。最简单的方法是:

def compute_function(x):
    x.compute()
    return x

A = [state() for _ in xrange(3)]
A = P.map(compute_function, A)

另一种方法是使用^{}创建对象并将其放入单独的进程中,并为其他进程提供代理。但是请注意,这意味着通过代理对对象进行的任何操作都将在进程之间进行通信,这是。在

相关问题 更多 >