「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > FastAPI の UploadFile が Flask よりも遅い場合があるのはなぜですか?

FastAPI の UploadFile が Flask よりも遅い場合があるのはなぜですか?

2024 年 11 月 9 日に公開
ブラウズ:207

Why is FastAPI's UploadFile Sometimes Slower Than Flask?

FastAPI UploadFile のパフォーマンスと Flask の比較

FastAPI の UploadFile のパフォーマンスは、データ処理の違いにより Flask よりも遅くなる可能性があります。 FastAPI の UploadFile は非同期メソッドを利用しているため、効率的に処理しないとボトルネックが発生する可能性がありますが、Flask は同期メソッドを使用しています。

FastAPI の UploadFile が遅くなる理由は次のとおりです:

  • ブロッキング I/O: デフォルトでは、FastAPI の UploadFile メソッドはブロッキング I/O 操作を使用します。これにより、メイン スレッドが妨げられ、API の速度が低下する可能性があります。
  • データ チャンク: Starlette (FastAPI の基礎となるフレームワーク) は、デフォルトの max_size が 1MB の SpooledTemporaryFile を使用します。データがこのサイズを超えると、ディスク上の一時ファイルに書き込まれ、別のレベルの I/O オーバーヘッドが追加されます。

FastAPI での効率的なファイル アップロードのベスト プラクティス:

]

aiofiles を使用した非同期ファイル書き込み

aiofiles ライブラリを使用した非同期ファイル書き込みを使用して、ノンブロッキング方式でファイルを書き込みます。このアプローチにより、特に大きなファイルのパフォーマンスが向上します。

ファイルをチャンクで読み取る

ファイル全体をメモリにロードしないように、指定したサイズのチャンクでファイルを読み取ることを検討してください。これにより、メモリの問題が防止され、大きなファイルのアップロードのパフォーマンスが向上します。

run_in_threadpool() の使用

メイン スレッドのブロックを回避するには、FastAPI の run_in_threadpool() 関数を使用してブロック I/O 操作を実行します。別のスレッド。これにより、ファイル関連のタスクがブロックされずに実行されます。

リクエスト本文にストリームとして直接アクセス

サーバー上のファイル ストレージが必要ない場合は、リクエスト本文にストリームとして直接アクセスします。 request.stream() を使用してストリームを送信します。この方法により、不必要な I/O オーバーヘッドを発生させることなく効率的なファイル処理が可能になります。

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3