uvicornのワーカーってなぁに
uvicornとは?
PythonのWebアプリ(FastAPIとかStarletteとか)をHTTPサーバーとして動かせるようにするやつ。
ASGI(Asynchronous Server Gateway Interface)という形式で軽くて早いから最近のPython界のデファクトスタンダードになってる
uvicornの起動方法
import uvicorn
host = os.getenv("FASTAPI_HOST", "127.0.0.1")
port = int(os.getenv("FASTAPI_PORT", "8001"))
uvicorn.run("main:app", host=host, port=port, reload=True, workers=2)
簡単!
ワーカーって何?
↑のworkersっていうオプションはなんだろう?
ワーカーは最大何個までプロセスを起動できるかっていう数字
基本的に1リクエスト1プロセス
workersが1だったら、10人が同時アクセスしたら、まず1人分だけ処理して残りの9人は待ち、になるけど
workersが10人だったらみんな同時に処理できる
でも、プロセスは基本的に1CPUを占有するから、マシンが8CPUだったらワーカーも8個まで?と思ったけど、
公式では
ワーカー数 = (CPUコア数 × 2) + 1
が推奨されているらしぃ
意外と多いね??
CPUが暇なときには(DBアクセスしてるときとか)、OSの内部では他のプロセスにCPUを譲ったりが発生するので
CPUの数よりも多くていいということらしい
(でも、アプリの性質による)