我有两个函数需要先后应用于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
的一个调用,一切都按预期进行)。是否有一种无需使用任何外部模块即可达到预期结果的方法?