如何在python并行处理中的集群中创建集群?

时间:2018-11-16 08:21:32

标签: python-3.x parallel-processing python-multiprocessing

我正在执行一项需要多个阶段并行处理的任务。

我的问题是:

我有四个数据集。我编写了一个函数来处理这4个数据集。 为了并行处理这4个数据集,我创建了4个集群,然后将4个数据集发送到4个集群。再次,我想将每个群集分成4个群集,因为我必须执行group by操作。我编写了代码来处理上述问题。但这让我犯了一个错误。这是我的示例代码。

def applyParallel(dfGrouped, func):
    retLst = Parallel(n_jobs=2, verbose=10)(delayed(func)(group) for name, group in dfGrouped)
    return pd.concat(retLst)

# This is the function to do group by parallel processing.
def new(x):
    tsc_out = applyParallel(x.groupby(gbcols), custum_func) 

def f1():
    from joblib import Parallel, delayed
    Parallel(n_jobs=4)(delayed(new)(i) for i in range(4)) #4 data sets

如果仅一次创建集群,则此功能运行正常。如果我们尝试将每个群集拆分为多个群集,它将无法正常工作。 就我而言,我需要创建总计20个群集。

谢谢。

1 个答案:

答案 0 :(得分:1)

如果我正确理解了您的情况,则可以使用charm4py的池执行类似的操作 的工人(有关更多信息,请参见https://charm4py.readthedocs.io/en/latest/pool.html 信息)。例如:

from charm4py import charm

def applyParallel(dfGrouped, func):
    retLst = charm.pool.map(func, [group for name, group in dfGrouped], ncores=2)
    return pd.concat(retLst)

# This is the function to do group by parallel processing
def new(x):
    tsc_out = applyParallel(x.groupby(gbcols), custom_func)

def f1(args):
    charm.pool.map(new, [i for i in range(4)], ncores=4, allow_nested=True)
    exit()

charm.start(f1)

使用工作人员池,您可以启动任务(我认为这与您所谓的集群相同),并指定多少个核心 您想运行一组给定的任务。虽然我认为您可以 只需离开ncores=-1,然后让charm4py使用可用的内核来安排任务。

如果您有任务要启动其他任务(如果您使用allow_nested=True),它也将起作用。

要注意的一件事是,当使用charm4py启动程序时,您将指定要启动的进程数 (您甚至可以在多个主机上启动进程,应用程序可以使用 全部同时)。因此,例如,如果您有8个核心,并且想利用所有 他们,用8个进程启动程序。