きっちーの日記

へっぽこエンジニアの日々の記録

【IT エンジニア日記】Rustの並列化を頑張りたかった...

Rustのpythonバインディングで並列処理がしたい...

Pythonからrustのバインディングを行う際は、maturinを使って処理をする。 私の場合、pyo3の記法に則ってバインディング処理を書いているのだが、並列処理をする場合は、parallelここの記事を参考にすればいいと思った...思っていた...

できない...並列化できない

私のやりたいこととして、python側のnumpy行列を使って、並列処理を行いたかった。そのため、PyArrayを使って、引数で受け取っているのだが、どうしようにもうまく行かない。

やろうとすると、'staticに変換しないと行けないと言われるが、pyo3の仕様上そのようなことはできない...

今回は諦めて、代わりにpython側でjoblibによって並列処理することにした。

できなかった理由

あまり詳しくわかっていないのですが、私が思うに、pythonのnumpyオブジェクトをrustが使う場合、python で作った配列のポインタをrustが持つので、マルチスレッドで安全に処理できなかったのだと思う。

詳しい方いたら、コメントいただけると勉強になります。

まとめ

pythonのjoblibであると、スレッドセーフに処理ができていない気がするので、どこかで解決策や抜け道を見つけて処理させたい...