【问题标题】:Dask parallel processing is much slower than using pathos multiprocessingDask 并行处理比使用 pathos 多处理慢得多
【发布时间】:2020-02-10 16:23:12
【问题描述】:

我是一个使用 dask 的相对新手,我试图了解如何在 pathos 多处理之上利用 dask 多处理。令我惊讶的是,dask 比 pathos 慢 3-4 倍。我显然做错了什么,并希望对此提供任何指导。

下面是我试图设置一个简单的算术操作的代码:

from pathos.multiprocessing import ProcessingPool as Pool
import pandas as pd, numpy as np,time
from dask import dataframe as dd
from dask.multiprocessing import get
from multiprocessing import cpu_count
nCores = cpu_count()

class test_pathos:
    def __init__(self):
        self.NumCols = 270
        self.NumRows = 250000
        self.cols = ['Col'+ str(i) for i in range(self.NumCols)]
        self.data = pd.DataFrame(np.random.randint(0,5,size=(self.NumRows,self.NumCols)),columns=self.cols)


    def ProcessCol(self,x):
        colname = x.name
        DQCol = colname + r'_DQ'
        self.data.loc[:, DQCol] = self.data[colname] + 1

    def AddTodata(self,colname):
        DQColumn = colname+r'_DQ'
        self.data.loc[:,DQColumn] = self.data[colname]+1
        return self.data[DQColumn]

    def AddProcess(self):
        p = Pool(nodes = nCores)
        ChangedCols = p.map(self.AddTodata,self.cols)
        ChangedColsDf = pd.concat(ChangedCols,axis=1)
        self.data = pd.concat([self.data,ChangedColsDf],axis=1)

    def AddProcess_apply(self):
        '---self.data.apply(self.ProcessCol)'
        dd.from_pandas(self.data, npartitions=nCores).map_partitions(lambda df : df.apply(self.ProcessCol)).compute(scheduler='processes')


'----------------------------------------------------MAIN---------------------------------------------------------------------'
if __name__ == "__main__":
    test_obj = test_pathos()
    tinit = time.time()
    shapebeforetransmutation = test_obj.data.shape
    test_obj.AddProcess()
    shapeaftertransmutation = test_obj.data.shape
    print('Pathos call time is :', time.time() - tinit)
    tinit = time.time()
    test_obj.AddProcess_apply()
    print('Dask call time is : ', time.time() - tinit)

【问题讨论】:

    标签: python-3.x python-multiprocessing dask pathos


    【解决方案1】:

    性能取决于很多因素。它可能是开销、数据传输或其他任何东西。不幸的是,如果不实际重做实验,就不太容易判断。

    要进一步了解 Dask 性能,我建议阅读文档Understanding Performance

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-03-02
      • 1970-01-01
      • 1970-01-01
      • 2020-07-13
      • 1970-01-01
      • 2015-05-21
      • 1970-01-01
      相关资源
      最近更新 更多