首页 > 解决方案 > 懒惰地迭代多处理池中的生成器

问题描述

我使用生成器生成数据(此数据是内存密集型的,尽管在此虚拟示例中并非如此),然后我必须对该数据进行一些计算。由于这些计算比数据生成花费的时间要长得多,我希望并行进行。这是我编写的代码(为简单起见,使用虚拟函数):

from math import sqrt
from multiprocessing import Pool

def fibonacci(number_iter):
    i = 0
    j = 1
    for round in range(number_iter):
        yield i
        k = i + j
        i, j = j, k


def factors(n):
    f = set()
    for i in range(1, n+1, 1):
        if n % i == 0:
            f.add(i)
    return f


if __name__ == "__main__":
    pool = Pool()
    results = pool.map(factors, fibonacci(45))

我从其他完全消耗迭代器的问题中学到了(见这里这里) 。map我希望避免这种情况,因为这会消耗大量内存(这就是我首先使用生成器的原因!)。

如何通过懒惰地迭代我的生成器函数来做到这一点?前面提到的问题的答案没有帮助。

标签: python-3.xmultiprocessinggenerator

解决方案


推荐阅读