如何快速生成嵌套循环值的元组列表适配multiprocessing.starmap()
快速生成三层循环参数迭代器的方法
要给multiprocessing.Pool().starmap()生成所需的参数迭代器,有两种高效且省内存的方法:
用
itertools.product生成笛卡尔积:itertools.product可以直接生成三个range的笛卡尔积,再通过生成器表达式把固定参数l补进去:import itertools l = some_value params = ((i, j, k, l) for i, j, k in itertools.product(range(1000), range(1000), range(1000)))itertools.product返回的是迭代器,配合生成器表达式不会一次性生成所有十亿个元组,内存占用极低。嵌套生成器表达式:
直接把原三层循环改成生成器表达式,同样避免生成完整列表:l = some_value params = ((i, j, k, l) for i in range(1000) for j in range(1000) for k in range(1000))
注意:绝对不要把迭代器转成列表(比如list(params)),1000×1000×1000的规模会生成十亿个元素,直接耗尽内存。starmap本身支持迭代器输入,会逐个取参数处理,完全适配这种方式。
内容的提问来源于stack exchange,提问作者TheRavenSpectre
相关产品推荐
相关产品推荐

