FastAPI 備忘録
FastAPI 備忘録
以前は flask をベースとしたconnexionを使って Web アプリ(API)を作っていたりしたのだが、FastAPIが人気なことや connexion の開発者が connexion にあまり熱を入れなくなってきているので移行を考える。
FastAPI とは
以下、抜粋。
それ以上をここで説明する意味も無いので以下、省略
FastAPI は、Pythonの標準である型ヒントに基づいてPython 3.6 以降でAPI を構築するための、モダンで、高速(高パフォーマンス)な、Web フレームワークです。
Gunicorn を使った起動
FastAPI のインストールは難しい話ではない。
pip install fastapi とかすれば良いだけなのでこれも割愛。
起動には uvicorn を使った例が公式ドキュメントに記載されているが
uvicornのサイトにも Gunicorn の利用を促しているような記述があるので FastAPI を利用する際には Gunicorn による起動とする。
Gunicorn による起動
Gunicorn は、20.1.0 以降は ASGI App を動かす事がデフォルトになっている。
従って、 WSGI 向けのオプションを付けずに実行すると起動はするが、アクセスすると
Internal Server Error になって実質、動かない。
よって、以下のように起動する。
gunicorn -k uvicorn.workers.UvicornWorker --bind "0.0.0.0:8000" --log-level debug main:app
Gunicorn 設定
なお、Gunicorn の起動設定はgunicorn.conf.py
で行うことができる。
これは起動時にコンソールを眺めているとこのような記述と共に
既存の設定(無ければデフォルト)が表示されるので分かる。
[2021-05-13 09:58:51 +0900] [18548] [DEBUG] Current configuration:
config: ./gunicorn.conf.py
コマンドオプションで渡すこともできるが
特に worker_class オプションを記憶しておいて毎度、打ち込むのは骨が折れるので
予め設定しておくとよい。
bind = "0.0.0.0:8000"
worker_class = "uvicorn.workers.UvicornWorker"
loglevel = "debug"
accesslog = None
access_log_format = '%(h)s %(l)s %(u)s %(t)s "%(r)s" %(s)s %(b)s "%(f)s" "%(a)s"'
proc_name = "Application Name"
ここで proc_name
を設定して表示するためには setproctitle
module が必要。
以下のようにしておくとよい。
pip install setproctitle
これで以後は以下のように実行するだけで最初のコマンドと同じような動作になる。
必要に応じて --reload
を付けると更新される度に reload されるが、本番でそれをするのはあまりオススメしない。
gunicorn --log-level debug main:app
Discussion