Python3:使用收益生成器进行并行处理

Python3: Parallel Processing using Yield generator

我将有一个函数可以产生值,另一个函数可以对这些产生的值执行一些操作。我想使用并行处理(即 concurrent.futures.ProcessPoolExecutor 或多处理)进行操作。该过程的顺序很重要,即第一个输出应该是第一个输入。伪代码如下:

def square(x):
    return x**2

def numbers():
    for i in range(1,10):
        yield i

if __name__ == '__main__':
    with concurrent.futures.ProcessPoolExecutor(4) as executor:        
       for i in executor.map(square, numbers):
           print(i)

我有以下未找到太多解释的问题:

1) 如何映射收益生成器和函数

2) 如果 ProcessPoolExecutor 是一个正确的选择,因为它是异步的并且会混乱 提高输入输出的顺序。

3) 如何使用多处理池和生成器。池映射方法不是 为我打印任何输出。我很难理解 Multiprocessing Pool的应用。

if __name__ == '__main__':
    with mp.Pool(4) as p:        
        print(p.map(square, numbers))

如果有人能帮助我理解并行处理,我将不胜感激。

P.S。我知道,如果我将生成器函数转换为数字列表并将函数 square 映射,就很容易使用和理解多处理;而且一切正常,但我不想将整个数据加载到内存中。

你的两个例子都有错误。您必须 调用 numbers 函数才能实际生成生成器:

if __name__ == '__main__':
    with concurrent.futures.ProcessPoolExecutor(4) as executor:        
       for i in executor.map(square, numbers()):
           print(i)

if __name__ == '__main__':
    with mp.Pool(4) as p:        
        print(p.map(square, numbers()))