对于我在Python3中的最后一个项目,我使用自定义 lazy 生成器来生成我的数据。然后使用池中的 imap (多处理)。
所以在这一点上,没有进行任何计算。
下一步是在文件上输出计算数据。
为此,我print(list(data))
或print(*data)
导致整个数据的计算(现在大约1.5Gib,位将快速增长),要么执行for
循环并打印每个一段数据,打印很多(现在约10e6电话,但会快速增长)。
那么,有没有办法让print
迭代一个懒惰的生成器?
谢谢。
答案 0 :(得分:0)
使用itertools docs中的这个食谱:
def grouper(iterable, n, fillvalue=None):
"Collect data into fixed-length chunks or blocks"
# grouper('ABCDEFG', 3, 'x') --> ABC DEF Gxx
args = [iter(iterable)] * n
return izip_longest(fillvalue=fillvalue, *args)
您可以自己批量调用print
:
for batch in grouper(data, 1000, ''):
print('\n'.join(batch))