我想我一直在改進我以前的問題。基本上,我需要大塊的文本(csv)文件發送片斷到一個multiprocess.Pool。要做到這一點,我認爲我需要在迭代對象中迭代行。 (見how to multiprocess large text files in python?)爲什麼一個可迭代對象在Python中沒有長度?
現在我意識到,文件對象本身(或_io.TextIOWrapper型)打開一個文本後是線迭代線,所以也許我的分塊碼(目前低於,對不起,以前失蹤了)可以大塊,如果它可以得到它的長度?但是,如果它是可迭代的,爲什麼我不能簡單地調用它的長度(按行而不是字節)?
謝謝!
def chunks(l,n):
"""Divide a list of nodes `l` in `n` chunks"""
l_c = iter(l)
while 1:
x = tuple(itertools.islice(l_c,n))
if not x:
return
yield x
謝謝!我希望如果8個內核最終以最先計數線路爲代價完成實際工作,我會獲得更多收益。如果不知道有多少行放入塊併發送到內核,我看不出有什麼辦法可以讓我的分塊工作。我希望這是一樣好,我可以在py3k中獲得: –