静かなる名辞

pythonとプログラミングのこと


multiprocessing

concurrent.futuresはなかなか便利かもしれない

概要 「いまさら?」と思われるかもしれませんが、concurrent.futuresを使う機会があり、けっこう幸せでした。 本当に「いまさら?」なのですが、どういうとき便利でどういう風に使えるのか書いておきます。 リファレンス concurrent.futures -- 並列タスク…

【python】Pool.mapをProcessPoolExecutor.mapに置き換えてみる

はじめに concurrent.futures.ProcessPoolExecutorは便利そうなので、Poolの代わりに使ってみようと思います。17.2. multiprocessing — プロセスベースの並列処理 — Python 3.6.5 ドキュメント 17.4. concurrent.futures – 並列タスク実行 — Python 3.6.5 ド…

multiprocessing.PoolでAttributeError: Can't get attribute '***' on <module '__main__' from '***.py'>みたいなエラー

概要 multiprocessing.Poolで並列化じゃ! と調子に乗ってコードを書いていると表題のようなエラーに遭遇することがあります。 再現するコード。poolerrortest.py from multiprocessing import Pool p = Pool(2) def f(x): print(x) p.map(f, [1,2]) # 中略 …

multiprocessing.Poolがやたらメモリを消費するときの対策

概要 multiprocessing.Poolは原理的にプロセスをforkさせるので、メインプロセスに大きなデータが残っているとそれが丸々コピーされてメモリ領域を食います。 グローバル関数限定ですが、initializerを使って必要ないデータを消すことができます。また、Pool…

【python】pythonでメモリ不足になったときにすること

pythonはLLですが、なぜかメモリを何十GBも消費するような(一般的なPCのリソースからすれば)大規模なデータ分析に広く使われています。このようなデータ分析では、往々にしてメモリ不足が生じ、それなりに配慮してプログラムを書かないとそもそもプログラ…

【python】multiprocessingはアホみたいにメモリ食うよって話

それなりに大きい(それでも数GBとかそんなもん)データをmultiprocessingで処理しようとしたら、メモリが溢れて大変だった。その原因と対処法について書いておく。 multiprocessingはプロセス間でメモリを共有しない。ということは、処理するデータは一々プ…