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

Tom*_*ski 2 python recursion generator multiprocessing

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

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))
Run Code Online (Sandbox Code Playgroud)

输出:

[1, 3, 6, 10, 15, 21, 28, 36,...]
Run Code Online (Sandbox Code Playgroud)

可以在这样的结构中使用多处理吗?

Wil*_*sem 5

您在这里描述的是干净的 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))
Run Code Online (Sandbox Code Playgroud)

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

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

# fast implementation
def rec(n):
    return n*(n+1)//2
Run Code Online (Sandbox Code Playgroud)