multiprocessing
概要 「いまさら?」と思われるかもしれませんが、concurrent.futuresを使う機会があり、けっこう幸せでした。 本当に「いまさら?」なのですが、どういうとき便利でどういう風に使えるのか書いておきます。 リファレンス concurrent.futures -- 並列タスク…
はじめに concurrent.futures.ProcessPoolExecutorは便利そうなので、Poolの代わりに使ってみようと思います。17.2. multiprocessing — プロセスベースの並列処理 — Python 3.6.5 ドキュメント 17.4. concurrent.futures – 並列タスク実行 — Python 3.6.5 ド…
概要 multiprocessing.Poolで並列化じゃ! と調子に乗ってコードを書いていると表題のようなエラーに遭遇することがあります。 再現するコード。poolerrortest.py from multiprocessing import Pool p = Pool(2) def f(x): print(x) p.map(f, [1,2]) # 中略 …
概要 multiprocessing.Poolは原理的にプロセスをforkさせるので、メインプロセスに大きなデータが残っているとそれが丸々コピーされてメモリ領域を食います。 グローバル関数限定ですが、initializerを使って必要ないデータを消すことができます。また、Pool…
pythonはLLですが、なぜかメモリを何十GBも消費するような(一般的なPCのリソースからすれば)大規模なデータ分析に広く使われています。このようなデータ分析では、往々にしてメモリ不足が生じ、それなりに配慮してプログラムを書かないとそもそもプログラ…
それなりに大きい(それでも数GBとかそんなもん)データをmultiprocessingで処理しようとしたら、メモリが溢れて大変だった。その原因と対処法について書いておく。 multiprocessingはプロセス間でメモリを共有しない。ということは、処理するデータは一々プ…