递归函数值生成器的多处理

时间:2018-01-16 22:00:02

标签: python recursion multiprocessing generator

我有一个简单的递归函数和它的值的生成器:

def rec(n):
    if n == 1:
        return 1
    else:
        return n + rec(n-1)

lis=[]    
for i in range(1,1000):
    lis.append(rec(i))

输出:

[1, 3, 6, 10, 15, 21, 28, 36,...]

可以在这种结构中使用多重处理吗?

1 个答案:

答案 0 :(得分:3)

您在此处描述的是 clean map:您将可迭代的值映射到值列表,以便 x i 在原始列表中,映射到结果中的 f(x i

我们可以将其与Pool

一起使用
from multiprocessing import Pool

def rec(n):
    if n == 1:
        return 1
    else:
        return n + rec(n-1)

pool = Pool(4)

lis = pool.map(rec, range(1,1000))

此处4是处理请求的进程数。通常这是一个或多个核心(或核心数量的倍数)。

但请注意,在您的情况下,您可以将rec函数替换为:

# fast implementation
def rec(n):
    return n*(n+1)//2