Introduction
見事な罠にはまったので。
マルチスレッドだと速度が出ないから、とマルチプロセスにしたら全体的なパフォーマンスは上がったのに、なぜか動かなくなったのが Open3D の DBSCAN によるクラスタリング。
What’s wrong?
実は Issue が上がっている。
Deadlock with multiprocessing (using fork) and OpenMP #1552 。
とはいえ、ちょっと探すのに苦労はした。
問題の Issue では、KDTreeSearchParamHybrid を使っていたため検索で cluster_dbscan を必死で検索していても何も出ないわけです。
POSIX 環境における folk が問題なようで、プロセス生成のコンテキストを spawn から folkserver に変えると解決する。
自宅でも検証した。
また、C++ でも同様にデッドロックをするように見える。
C++ では spawn や folkserver にすることはできても、ワーカーのコードをスクリプトとして実行する必要があるみたいなので、デッドロックを解除する版は未検証。
