Flaskの遅いエンドポイント、原因はLedgerにあり

Finding Slow Code with Wrapture

Flaskの遅いエンドポイント、原因はLedgerにあり

Flaskショップの/orderエンドポイントが遅い原因を、wraptureのツリー表示とself timeで特定。Ledger.recordが35.1msを占め、サービスやビューは子プロセスの影響で遅くなっていた。さらにAggregateコレクタで複数リクエストを集計し、テナント別のタグ付けで遅いリクエストを切り分ける方法も紹介。

The ledger accounts for essentially all of the service, which accounts for essentially all of the view.
  1. themgt

    2025年、『複数のプログラミング言語とテクノロジーに精通した経験豊富なソフトウェア開発者』はみんなこう言ってる:

    現在、私はサバティカル(ミニリタイア)中で、完全リタイアも考えています。IT業界はここ数年で大きな激動を経験しました…AI技術の急速な進歩により、意味のある仕事を求める経験豊富な開発者にとって新たな課題が生じています。

    2026年には:

    もっと安価な従兄弟。上記のすべては持続時間を保持していた。時には答えは単なる数値であることもある。Counterコレクタは操作が始まると同時にカウントし、それ以外は何も保持しないので、テストスイート全体の下で動かし続けても十分に安価だ。データベース層のexecuteを一度バインドし、カウンタを登録し、各テストにフィクスチャでクエリ予算を与えれば、古典的なN+1リグレッションは単に遅くなったテストとしてすり抜けるのではなく、数値付きで失敗する。

  2. simonw

    このライブラリには本当にわくわくしている。

    WraptureはGrahamの新しいプロジェクトだ。彼は以前にwrapt(20年以上前のPythonモンキーパッチライブラリ)を開発し、New Relic Pythonエージェントの最初のバージョンを作った人物だ。これはアプリを計装してNew Relicが何をしているか見られるようにするライブラリだ。

    Wraptureは同じツールセットでコードをモックし、計装する機能を提供する。テストで「このメソッドが発火したか」とか「このメソッドが発火したら代わりにこのダミーデータを返す」といった使い方ができ、コードを計装して何が呼ばれ、どれくらい時間がかかるかを測定することもできる。

    既存のPythonコードを変更せずに計装できる。代わりに、どのメソッドを計装したいかを記述したTOMLファイルを定義すれば、Wraptureがコードをライブパッチしてくれる。つまり、変更せずに実行する必要がある任意のPythonコードを計装し、結果をOpenTelemetryにエクスポートできる。

    リンク先の記事は、Grahamがこれについて書いた一連の投稿の一部だ。ここから始めることを勧める:https://grahamdumpleton.me/posts/2026/08/introducing-wraptur...

    そして、彼がちょうど公開した他の投稿へのリンクをまとめたインデックス記事を見てほしい:https://grahamdumpleton.me/posts/2026/09/trying-out-wrapture...

この日のほかの記事

2026-09-12