Python の generator は生成側で coroutine は消費側 ― 2022年04月01日 12時20分51秒
要約すると、データベースなどのデータを取得する時に、一気に dict や list 型としてまとめて処理していたのが原因。一時的かも知れないが全てのデータがメモリに乗るので、データの量が多くなるにつれてピークも大きくなる。
それに対応するのには一気にまとめずに、データを一つ毎に随時処理をすれば良い。イテーレタを渡して処理を数珠繋ぎにしたり、データではなくストリームを渡したり等の対処になる。
Python でこのような用途に強力なのが、generator と coroutine。generator は iterator を発展させたもので、関数内か複数に渡って戻り値を返す様な事が出来る。基本的にデータの生成側。coroutine はそのデータを消費しつつ制御を generator 側に戻すことが出来る。なお、coroutine は、この時に戻り値を返しながら、generator 側に制御を戻すことも出来る。
まあ、見方によっては関数の内部同士から goto を繰り返す、setlongjmp に見えなくもない。そして、実装時には実際にデータのやりとりがこんがらがりやすい。なにはともあれ、データのピークを避けての随時処理には向いている。
後々、簡単な例をあげて、まとめておきたいと思う。
最近のコメント