問題:
大量の JSON データをFastAPI エンドポイントは著しく遅く、約 1 分かかります。データは、最初に json.loads() を使用して寄せ木細工のファイルからロードされ、返される前にフィルタリングされます。データを配信するためのより迅速なアプローチを求めています。
解決策:
応答時間の遅さは、parse_parquet() 関数内の複数の JSON 変換に起因します。 FastAPI は、戻り値を json.dumps() でシリアル化する前に、jsonable_encoder を使用して自動的にエンコードしますが、これは時間のかかるプロセスです。 orjson や ujson などの外部 JSON エンコーダを使用すると、速度が向上する可能性があります。
ただし、最も効率的な解決策は、不必要な JSON 変換を避けることです。次のコードは、カスタム APIRoute クラスを利用して、pandas DataFrame からの直接 JSON 応答を有効にします。
<code class="python">from fastapi import APIRoute class TimedRoute(APIRoute): # Custom handler for capturing response time def get_route_handler(self): original_route_handler = super().get_route_handler() async def custom_route_handler(request): before = time.time() response = await original_route_handler(request) duration = time.time() - before response.headers["Response-Time"] = str(duration) print(f"route duration: {duration}") return response return custom_route_handler</code>
このコードにより、さまざまなデータ変換メソッドの応答時間を比較できます。 160,000 行、45 列のサンプル寄木細工ファイルを使用すると、次の結果が得られました:
ユーザー エクスペリエンスを向上させるには、ブラウザー内にデータを表示するのではなく、ダウンロードを開始するために、Content-Disposition ヘッダーにattachment パラメーターとファイル名を設定することを検討してください。このアプローチはブラウザーの制約を回避し、プロセスを高速化します。
さらに、Dask は大規模なデータセットの最適化された処理を提供し、パンダの代替手段を提供します。大量のデータを処理するときにメモリの問題を回避するために、ストリーミングまたは非同期応答も考慮される場合があります。
以上がFastAPI で大規模なデータセットの JSON 応答時間を最適化する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。