ログファイルの集計をpythonでやってるとめちゃめちゃメモリ食うので遅延読み込みを使ったりするのだが毎回書くのもアホらしいのでライブラリとして書いてみる。
yield使ってジェネレータとして実装しておけば問題なさそうなのでこんな感じ。ログ集計のたびにコピペして使おう。
def lazyread(f, delimiter): running = f.read(0) while True: new_data = f.read(1024) if not new_data: yield running return running += new_data while delimiter in running: curr, running = running.split(delimiter, 1) yield curr + delimiter
チャンクサイズで分たいケースも考慮するとこんな実装もありかもとか思ってたり。。使いながら修正していこう。
while True: data = file_object.read(chunk_size) if not data: break yield data