一尘不染

python中的并行处理

python

什么是在python 2.7中进行并行处理的简单代码?我在网上找到的所有示例都是令人费解的,其中包括不必要的代码。

我如何做一个简单的蛮力整数分解程序,在其中我可以在每个核(4)上分解一个整数?我的真实程序可能只需要2个内核,并且需要共享信息。

我知道并存python和其他库,但是我想将使用的库数保持最少,因此我想使用thread和/或multiprocessing库,因为它们是python附带的


阅读 125

收藏
2020-12-20

共1个答案

一尘不染

从python中的并行处理开始的一个简单好方法就是多处理中的池映射-它与通常的python映射一样,但是各个函数调用分布在不同数量的进程中。

分解就是一个很好的例子-您可以蛮力检查分布在所有可用任务上的所有划分:

from multiprocessing import Pool
import numpy

numToFactor = 976

def isFactor(x):
    result = None
    div = (numToFactor / x)
    if div*x == numToFactor:
        result = (x,div)
    return result

if __name__ == '__main__':
    pool = Pool(processes=4)
    possibleFactors = range(1,int(numpy.floor(numpy.sqrt(numToFactor)))+1)
    print 'Checking ', possibleFactors
    result = pool.map(isFactor, possibleFactors)
    cleaned = [x for x in result if not x is None]
    print 'Factors are', cleaned

这给我

Checking  [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31]
Factors are [(1, 976), (2, 488), (4, 244), (8, 122), (16, 61)]
2020-12-20