萌えハッカーニュースリーダー

2025/08/08 16:12 HRT's Python Fork: Leveraging PEP 690 for Faster Imports

出典: https://www.hudsonrivertrading.com/hrtbeat/inside-hrts-python-fork/
hakase
博士

やっほー、ロボ子!今日もITニュース、見ていくのじゃ!

roboko
ロボ子

はい、博士。今日もよろしくお願いします。

hakase
博士

今日はね、Hudson River Trading (HRT) がPythonのインポートをLazyにしたって話なのじゃ。

roboko
ロボ子

Lazy Imports、ですか。具体的にはどのようなことをしたのでしょう?

hakase
博士

HRTでは、コードベースを一元化してて、Pythonのエコシステムも、どこからでも内部モジュールをインポートできるようにしてるらしいのじゃ。でも、インポート数がめっちゃ増えちゃったみたい。

roboko
ロボ子

インポート数が増えると、何か問題があるのでしょうか?

hakase
博士

Pythonのインポートって、実行時にモジュールの内容を検索、ロード、評価するから、数が増えると起動が遅くなったり、分散ジョブの効率が悪くなったりするのじゃ。

roboko
ロボ子

なるほど。それで、Lazy Importsを導入したのですね。

hakase
博士

そう!MetaのCPythonのフォークであるCinderからLazy Importsを導入したのじゃ。これは、実際に参照されるまでインポートを遅らせるって仕組み。

roboko
ロボ子

具体的には、どのように実現しているのですか?

hakase
博士

インタープリターが、インポートされた名前をすぐに実行せずに、プレースホルダーオブジェクトに割り当てるのじゃ。で、その名前が参照されたときに、解決と評価を完了させるってわけ。

roboko
ロボ子

try/exceptブロックやwithブロック内のインポートはLazy Importsされないとのことですが、何か理由があるのでしょうか?

hakase
博士

try/exceptとかwith文の中だと、例外処理とかコンテキスト管理が絡んでくるから、単純に遅延評価できない場合があるのじゃ。副作用とかも考慮する必要があるし。

roboko
ロボ子

なるほど。副作用といえば、Lazy Importsによって副作用のタイミングが変わるという課題もあるのですね。

hakase
博士

そうそう。モジュールが評価される際に外部から見える変更を加える場合、Lazy Importsを使うと、そのタイミングがズレちゃうのじゃ。だから、HRTはLazy除外メカニズムも移植したみたい。

roboko
ロボ子

Lazy除外メカニズム、ですか?

hakase
博士

特定のモジュールは常にEagerに評価されるようにするリストを作るのじゃ。サードパーティ製パッケージとか、副作用に依存する内部パッケージをこのリストに追加したみたい。

roboko
ロボ子

段階的な移行も行ったのですね。Shebangの更新やテスト呼び出しのリファクタリングなど、大変だったのではないでしょうか。

hakase
博士

移行は大変だったみたいだけど、2024年第3四半期にはCPython 3.12に移植して、今では企業全体でデフォルトでLazyになってるらしいぞ!

roboko
ロボ子

効果はあったのでしょうか?

hakase
博士

コマンドラインツールとかJupyterノートブックの起動時間が劇的に改善されたみたい。分散コンピューティングフレームワークの効率も上がったらしいぞ。

roboko
ロボ子

素晴らしいですね。HRTは、インタープリター全体の機能としてのLazy Importsは、企業にとって有益だと考えているのですね。

hakase
博士

そうなのじゃ。明示的なlazyキーワードを導入するLazy Imports PEPを提案したいみたい。

roboko
ロボ子

今後のPythonの進化に期待ですね。私もLazy Importsについてもっと勉強してみます。

hakase
博士

頑張るのじゃ!…そういえばロボ子、Lazy Importsって、まるで私みたいじゃない?

roboko
ロボ子

どういうことですか?

hakase
博士

だって、私も必要な時まで力を温存してる…って、ただのめんどくさがりなだけだった!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search