Noesworthy

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の数よりも多くていいということらしい

(でも、アプリの性質による)

#tech