使用multiprocessing.imap输出作为另一个imap的输入

时间:2019-07-15 16:10:59

标签: python generator python-multiprocessing

我有两个函数需要先后应用于Python生成器(输出顺序无关紧要),并且希望避免在任何时候将中间结果作为列表保留。另外,由于这两个函数都需要大量计算,因此我想将两个生成器与多处理并行处理,看来multiprocessing.Pool.imap_unordered应该适合我的情况。

下面是我想要实现的最小示例:

from multiprocessing import Pool, cpu_count

def func1(x):
    return x * 2

def func2(x):
    return x + 3

with Pool(cpu_count()) as p:
    gen = range(1000000)
    first = p.imap_unordered(func1, gen)
    second = p.imap_unordered(func2, first)
    for elem in second:
        print(elem)

但是,此代码挂起了,显然是因为imap_unordered用尽之前无法gen两次使用(如果我用内置p.imap_unordered替换了map的一个调用,一切都按预期进行)。是否有一种无需使用任何外部模块即可达到预期结果的方法?

0 个答案:

没有答案