Python Pool.map deepcopy逐渐磨损

Python Pool.map deepcopy逐渐磨损,python,multiprocessing,partial,pool,functools,Python,Multiprocessing,Partial,Pool,Functools,我正在尝试并行化一个任务,该任务涉及一个函数,该函数将自定义对象作为参数。在函数体中,所述对象被操纵,因此我需要在每次试验开始时对原始对象进行深度复制。当我使用下面的代码时,显示对象是否更改的标记直到~trial 30才会显示。我想我对如何通过functools.partial正确传输复制的对象感到困惑 主人 工人 def processTrial(object, array1, array2, trial_number): if object.property != []:

我正在尝试并行化一个任务,该任务涉及一个函数,该函数将自定义对象作为参数。在函数体中,所述对象被操纵,因此我需要在每次试验开始时对原始对象进行深度复制。当我使用下面的代码时,显示对象是否更改的标记直到~trial 30才会显示。我想我对如何通过functools.partial正确传输复制的对象感到困惑

主人

工人

def processTrial(object, array1, array2, trial_number):
    if object.property != []:
        print '!!!!!!!!'
    for i in xrange(len(array1)):
        """ stuff including changing object.property """

作为旁注,我有时也会收到错误“对象实例作为无属性‘self’”。。。有什么建议吗?

你说的“磨损”是什么意思?这里到底发生了什么?最重要的是,如果您试图更改
多处理
中的
object.property
,则多处理固有的特点是,子进程中的更改可能在其他子进程或父进程中看到,也可能看不到;如果您需要,那么您的代码是错误的。如果要共享数据,必须显式共享数据,如
共享状态
部分所述。(我猜您的
.map
调用选择了~30的
chunksize
,这就是为什么您在30左右看到的行为与在d0附近看到的不同,但这并不重要。)“object.property”是需要更改的内容,以便计算“processTrial”的返回值。它的更改不应影响“processTrial”的另一项任务。IE在一个实例中可能是“2”,在另一个实例中可能是“1”,但在每种情况下都必须以[]开头。但是,我想我找到了解决方法,那就是在processTrial的开始使用deepcopy。如果在每种情况下都必须以
[]
的形式启动,为什么不在每种情况下都将其设置为
[]
?或者,就这一点而言,为什么不在每种情况下创建
对象本身呢?这很公平,但我希望从中获得尽可能多的速度。仅仅设置变量是不够的,还会产生太多的副作用。除非你能看到在processTrial开始时而不是在pool.map中执行deepcopy的固有错误,否则我将使用它。在我看来,
对象
构造函数实际花费的时间并不多,但调用
deepcopy
,然后将其酸洗和解酸洗,以在进程之间发送,这是不正确的。但如果是这样的话,那么好吧,每次都要进行酸洗、去酸洗和深度复制,而不是施工。
def processTrial(object, array1, array2, trial_number):
    if object.property != []:
        print '!!!!!!!!'
    for i in xrange(len(array1)):
        """ stuff including changing object.property """