我是新手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
我似乎无法理解正在发生的事情。如何启用此功能?
答案 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]
适合我