Joblib与对象

时间:2014-05-21 16:08:15

标签: python object parallel-processing

我是新手w.r.t.并行处理,我想在这里请求一些帮助。

我有一个我需要在内存中复制的对象,比如50-100次甚至更多。这用于生物病毒模拟器,我试图模拟细胞内病毒的复制和爆发。

我正在使用的代码现在使用deepcopy(请不要判断),并且具有以下逻辑:

from copy import deepcopy
from random import random
from datetime import datetime

import hashlib

class Virus(object):

    def __init__(self):
        self.id = None
        self.SetID()


    def SetID(self):
        random_number = str(random())
        current_time = str(datetime.now())

        unique_string = random_number + current_time

        unique_id = hashlib.new('sha512')
        unique_id.update(unique_string)

        self.id = unique_id.hexdigest()

    def GetID(self):
        return self.id

    def Replicate(self):
        new_virus = deepcopy(self)
        new_virus.SetID()

        return new_virus

由于我的目标是生成病毒的多个副本,但我可能需要多次迭代,我想到使用joblib加快速度。 (我可能错了,如果是这样,请纠正我!)因此,我尝试了以下代码:

h = Virus()
results = Parallel(n_jobs=2)(delayed(h.Replicate())(h) for i in range(10))

我希望结果是10个病毒的列表,但我得到一个TypeError说:

TypeError: 'Virus' object is not callable

我似乎无法理解正在发生的事情。如何启用此功能?

1 个答案:

答案 0 :(得分:4)

延迟是包装一个函数(不是一个对象,它现在将返回一个复制的病毒)。所以不要在延迟通话中调用复制

但似乎你也无法包装实例方法,所以make复制一个会复制其参数的常规函数​​

def replicate(virus):
    return virus.Replicate()

h = Virus()
results = Parallel(n_jobs=2)(delayed(replicate)(h) for i in range(10))
print [x.id for x in results]

适合我