【IT エンジニア日記】Rustの並列化を頑張りたかった...
Rustのpythonバインディングで並列処理がしたい...
Pythonからrustのバインディングを行う際は、maturinを使って処理をする。 私の場合、pyo3の記法に則ってバインディング処理を書いているのだが、並列処理をする場合は、parallelここの記事を参考にすればいいと思った...思っていた...
できない...並列化できない
私のやりたいこととして、python側のnumpy行列を使って、並列処理を行いたかった。そのため、PyArrayを使って、引数で受け取っているのだが、どうしようにもうまく行かない。
やろうとすると、'static
に変換しないと行けないと言われるが、pyo3の仕様上そのようなことはできない...
今回は諦めて、代わりにpython側でjoblibによって並列処理することにした。
できなかった理由
あまり詳しくわかっていないのですが、私が思うに、pythonのnumpyオブジェクトをrustが使う場合、python で作った配列のポインタをrustが持つので、マルチスレッドで安全に処理できなかったのだと思う。
詳しい方いたら、コメントいただけると勉強になります。
まとめ
pythonのjoblibであると、スレッドセーフに処理ができていない気がするので、どこかで解決策や抜け道を見つけて処理させたい...