注目★★★★★Hacker News
PyO3でRustをPythonに組み込むとき、変換処理がボトルネックに
30秒で把握
- 1PyO3とmaturinでRust製JSONパーサーをPythonからimport可能に
- 2JSONツリー変換で約10万個のPythonオブジェクトを生成
- 3大規模な戻り値では変換処理がパース時間を上回り得る
要約
PyO3とmaturinを使えば、Rust製のJSONパーサーをPythonから通常のパッケージとして呼び出せる。Rust側でJSONツリーを構築した後、Pythonのdictやlistへ変換する処理が発生し、大規模データではパース自体より重くなり得る。10万個の値を含む文書では、境界で約10万個のPythonオブジェクトを生成する。RustのエラーはPyErrへ変換でき、Python側ではValueErrorやFileNotFoundErrorとして扱える。大きな構造体を返す移植では、アルゴリズムだけでなくRustからPythonへの変換を計測し、必要なら遅延評価のRust-backed viewを検討すべきだと論じた。
あなたへの影響
Rust拡張をPython本番コードへ導入するチームは、パース処理だけでなくPythonオブジェクト生成までプロファイルし、次のスプリントで境界コストを検証すべきです。
推奨:大規模な戻り値では、全体変換を避ける遅延評価が有効になる可能性があります。