【问题标题】:Python, multiprocessing with classesPython,带类的多处理
【发布时间】:2014-08-04 23:29:00
【问题描述】:

我实现了小型统计函数,并通过多处理并行化。 代码的整体结构如下:

def worker(args, no):
    f = Stat.fit(args)
    return f.result

class Stat:
    def fit(self):
        doing various things...

    def bootstrap(self):
        p = mp.Pool(mp.cpu_count())
        parameter = ... #set parameters for Stat
        worker = functools.partial(worker, parameter)

        for i, _ in enumerate(p.imap_unordered(worker, range(1000))):
            pass

因此,Stat 类中的引导方法调用运行函数的进程,该函数创建 Stat 类的实例并运行 fit() 方法。我想这种方法可能效率很低。用函数替换类会更好吗?或者使用这样的类不会影响多处理性能?

【问题讨论】:

    标签: python multiprocessing overhead


    【解决方案1】:

    这不是效率低下(不会影响性能),它只是非正统。如果你从Stat 中去掉bootstrap,它可能会更干净一些,因为它看起来不像是该类的方法。

    def worker(args, no):
        f = Stat.fit(args)
        return f.result
    
    def bootstrap(self):
        p = mp.Pool(mp.cpu_count())
        parameter = ... #set parameters for Stat
        worker = functools.partial(worker, parameter)
    
        for i, _ in enumerate(p.imap_unordered(worker, range(1000))):
            pass
    
    class Stat:
        def fit(self):
            doing various things...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-25
      • 2014-11-21
      • 1970-01-01
      • 2022-01-23
      • 2014-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多