【问题标题】:Joblib with objectsJoblib 与对象
【发布时间】:2014-05-21 16:08:15
【问题描述】:

我是新人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

我似乎无法理解正在发生的事情。我怎样才能让它工作?

【问题讨论】:

    标签: python object parallel-processing


    【解决方案1】:

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

    但您似乎无法包装实例方法,因此请复制一个可以复制其参数的常规函数​​

    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]
    

    为我工作

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-20
      • 2018-09-06
      • 2016-07-24
      • 1970-01-01
      • 2012-09-18
      相关资源
      最近更新 更多