基本的にWebAPIはHTTP通信やDBとのやり取りなどのIOが主なボトルネックですので非同期処理に対応していることが重要です。FastAPIでは従来のPythonの標準的なWSGIではなく、非同期処理に対応したASGIに準拠している点がFlaskなどとの大きな違いです。内部でStartletteを利用し、ASGIの実行環境としてUvicornを使用するなどの点は他の回答の通りです。
もちろんちゃんとASGIの利点を生かすためにはasync defを使用して関数を定義し、IO処理ではasync/awaitをしっかり利用することが不可欠です。DBとの接続も非同期処理に対応したものを使用する必要があります[1] 。
しかし、それでもnodejsやGo並みというのはかなり盛っているといわざるを得ません。マイクロベンチマークでいくら速くても言語レベルで非同期前提のそれらの言語と比べると必ず様々なオーバーヘッドが出てきます。ただ、FlaskなどのWSGIの時代と比べるとはるかに進化しているということは確実です。
私が思うにFastAPIの一番の売りはPythonのType Hintを実際にデータのバリデーションに使用したり、OpenAPIドキュメントの自動生成に活用しているという点です。特に後者については同等の機能を有した他言語のフレームワークをいまだに見たことがなく、私はAPIサーバーを作る場合は第
… (もっと読む)脚注
気になったので調べてみました。
FastAPIを使ったことも無いしソースを読んだわけでもないので書いてあることが正しければという前提です。
- 高速: NodeJS や Go 並みのとても高いパフォーマンス (Starlette と Pydantic のおかげです)。
Starlette と Pydanticというライブラリが肝のようですね。
そして、
- ASGI serverにUvicornやHypercornを使っているため
- それらはuvloopという非同期処理実行ライブラリを使用しているため
- uvloopがCythonで実装されているため
- Starlette が効率的に非同期処理を実行するため
- Benchmarks - pydantic なぜ速いかは分からなかったが公式は速いと言っている
あたりが速い理由のようです。
ASGI serverについてはpythonの他フレームワークでも使えるようなので、そこまでの優位性にはならなさそうですが、速いものを一纏めにして「FastAPI」として提供しているところに強みがありそうですね。
0 コメント:
コメントを投稿