Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
并行化Python';s reduce命令_Python_Performance_Parallel Processing_Mapreduce - Fatal编程技术网

并行化Python';s reduce命令

并行化Python';s reduce命令,python,performance,parallel-processing,mapreduce,Python,Performance,Parallel Processing,Mapreduce,在Python中,我运行以下形式的命令 reduce(func, bigArray[1:], bigArray[0]) 我想添加并行处理来加速它 我知道我可以通过拆分阵列、在单独的部分上运行进程以及合并结果来手动完成这项工作 然而,考虑到并行运行reduce的普遍性,我想看看是否有一种本地方式或库可以自动完成这项工作 我在运行一台6核的机器 对于遇到这个问题的人,我最终写了一个助手来做这件事 def parallelReduce(l, numCPUs, connection=None):

在Python中,我运行以下形式的命令

reduce(func, bigArray[1:], bigArray[0])
我想添加并行处理来加速它

我知道我可以通过拆分阵列、在单独的部分上运行进程以及合并结果来手动完成这项工作

然而,考虑到并行运行reduce的普遍性,我想看看是否有一种本地方式或库可以自动完成这项工作


我在运行一台6核的机器

对于遇到这个问题的人,我最终写了一个助手来做这件事

def parallelReduce(l, numCPUs, connection=None):

    if numCPUs == 1 or len(l) <= 100:
            returnVal= reduce(reduceFunc, l[1:], l[0])
            if connection != None:
                    connection.send(returnVal)
            return returnVal

    parent1, child1 = multiprocessing.Pipe()
    parent2, child2 = multiprocessing.Pipe()
    p1 = multiprocessing.Process(target=parallelReduce, args=(l[:len(l) // 2], numCPUs // 2, child1, ) )
    p2 = multiprocessing.Process(target=parallelReduce, args=(l[len(l) // 2:], numCPUs // 2 + numCPUs%2, child2, ) )
    p1.start()
    p2.start()
    leftReturn, rightReturn = parent1.recv(), parent2.recv()
    p1.join()
    p2.join()
    returnVal = reduceFunc(leftReturn, rightReturn)
    if connection != None:
            connection.send(returnVal)
    return returnVal
def parallelReduce(l,numpus,connection=None):

如果numpus==1或len(l)如果您能够组合map和reduce(或希望连接结果而不是更一般的reduce),则可以使用mr4p:

类中的_reduce函数的代码似乎通过multiprocessing.pool实现并行处理,以汇集通常的reduce进程,大致如下所示:

reduce(<Function used to reduce>, pool.map(partial(reduce, <function used to reduce>), <List of results to reduce>))
reduce(,pool.map(部分(reduce,),)
我还没有试过,但语法似乎是:

mr4mp.pool().mapreduce(<Function to be mapped>,<Function used to reduce>, <List of entities to apply function on>)
mr4mp.pool().mapreduce(,)

@user3080953我只有一台6核的机器。运行Spark会有好处吗?我不知道,对不起,你应该对它进行基准测试。它也有很长的启动时间,所以这取决于你有多少数据