python-3.x - 懒惰地迭代多处理池中的生成器
问题描述
我使用生成器生成数据(此数据是内存密集型的,尽管在此虚拟示例中并非如此),然后我必须对该数据进行一些计算。由于这些计算比数据生成花费的时间要长得多,我希望并行进行。这是我编写的代码(为简单起见,使用虚拟函数):
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
我希望避免这种情况,因为这会消耗大量内存(这就是我首先使用生成器的原因!)。
如何通过懒惰地迭代我的生成器函数来做到这一点?前面提到的问题的答案没有帮助。
解决方案
推荐阅读
- json - 在node.js中提交表单时出现错误“TypeError:无法读取未定义的属性'名称'”
- excel - 将表格与其他工作表中的列表进行比较并删除任何匹配项
- c# - 将数据从数据库复制到excel文件,花费太多时间
- qt - 为什么我从 google drive rest api 得到服务器回复被禁止?
- django - 带有不同注释的 Django QuerySet OR
- django - django 错误日志的最佳文件大小是多少。大字段是否会导致服务器运行缓慢?
- c++ - 实例化多种类型的成员函数模板
- javascript - 将对象属性转换为对象数组
- javascript - Javascript:更改表格行 HTML
- linux - 带有 libsecret 的 Git 抛出无法在没有 X11 $DISPLAY 的情况下自动启动 D-Bus