ホームページ >バックエンド開発 >Python チュートリアル >FastAPI で JSON データの取得速度を最適化するには?
FastAPI での JSON データ取得速度の最適化
FastAPI の GET エンドポイントからの大量の JSON ペイロードの戻りが遅いという問題が繰り返し発生します。 json.dumps() を使用して json.loads() を使用してファイルからデータを送信すると、応答が大幅に遅延します。戻りデータを使用してユーザーにデータを送信できますが、より効率的なアプローチはありますか?
問題:
処理パイプラインは、最初に pandas の to_json を使用してデータを JSON に変換します。 () 関数を使用して、それを json.loads() で辞書にロードし、最後に JSON に変換し直します。この複数ステップの変換プロセスにより、かなりの遅延が発生します。
提案された解決策:
まず、FastAPI が戻り値を JSON 互換データに変換することを認識することが重要です。 jsonable_encoder に続いて、標準の Python の json.dumps() 関数を使用してシリアル化します。この 2 段階のプロセスは遅いことが知られています。
オプション 1: 代替 JSON エンコーダを使用する
orjson や ujson などの代替 JSON エンコーダの使用を検討してください。これらのエンコーダーは、デフォルトの jsonable_encoder と json.dumps() の組み合わせよりも優れたパフォーマンスを発揮します。
オプション 2: カスタム レスポンスを直接返す
最適なパフォーマンスを得るには、カスタム APIRoute クラスを使用してレスポンスを返します。物体。これにより、FastAPI のデフォルトの JSON 変換プロセスがバイパスされます。
<code class="python">from fastapi.routing import APIRouter, APIRoute class TimedRoute(APIRoute): ... app = FastAPI() router = APIRouter(route_class=TimedRoute) @router.get("/custom-response") def get_data(): df = pd.read_parquet('data.parquet') return Response(df.to_json(orient="records"), media_type="application/json") app.include_router(router)</code>
追加の考慮事項:
以上がFastAPI で JSON データの取得速度を最適化するには?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。