# ๐ฝ ๐จโ๐ญ - ๐ โฎ๏ธ Uvicorn
โก๏ธ โ
๐ ๐ ๐ ๏ธ ๐ง โช๏ธโก๏ธ โญ:
* ๐โโ - ๐บ๐ธ๐
* ๐โโ ๐ ๐ด
* โ
* **๐งฌ (๐ข ๐ ๏ธ ๐)**
* ๐พ
* โฎ๏ธ ๐ โญ โถ๏ธ
๐ ๐ โ, โฎ๏ธ ๐ ๐ฐ ๐ฉบ, ๐ โ๏ธ ๐ฒ ๐โโ **๐ฝ ๐** ๐ Uvicorn, ๐โโ **๐ ๐ ๏ธ**.
๐โ ๐ ๏ธ ๐ธ ๐ ๐ ๐ฒ ๐ โ๏ธ **๐งฌ ๐ ๏ธ** โ ๐ **๐ ๐** & ๐ช ๐ต ๐
๐จ.
๐ ๐ โฎ๏ธ ๐ ๐ [๐ ๏ธ ๐ง](concepts.md){.internal-link target=_blank}, ๐ค ๐ ๐ ๐ ๐ช โ๏ธ.
๐ฅ ๐ค ๐ ๐ฆ ๐ โ โ๏ธ **๐** โฎ๏ธ **Uvicorn ๐จโ๐ญ ๐ ๏ธ**.
/// info
๐ฅ ๐ โ๏ธ ๐ฆ, ๐ผ โฎ๏ธ โ โ๏ธ Kubernetes, ๐ค ๐ ๐ฌ ๐ ๐
๐ ๐ โญ ๐: [FastAPI ๐ฆ - โ](docker.md){.internal-link target=_blank}.
๐ฏ, ๐โ ๐ ๐ **Kubernetes** ๐ ๐ ๐ฒ **๐ซ** ๐ โ๏ธ ๐ & โฉ๏ธ ๐ **๐ Uvicorn ๐ ๏ธ ๐ ๐ฆ**, โ๏ธ ๐ค ๐ ๐ฌ ๐ ๐ โซ๏ธ โช ๐ ๐.
///
## ๐ โฎ๏ธ Uvicorn ๐จโ๐ญ
**๐** โด๏ธ ๐ธ ๐ฝ โ๏ธ **๐จ๐ป ๐ฉ**. ๐ โ ๐ ๐ ๐ช ๐ฆ ๐ธ ๐ ๐บ & โณ. ๐ โซ๏ธ ๐ซ ๐ โฎ๏ธ **FastAPI**, FastAPI โ๏ธ ๐ **๐ซ ๐ฉ**.
โ๏ธ ๐ ๐โ๐ฆบ ๐ท **๐ ๏ธ ๐จโ๐ผ** & ๐ค ๐ฉโ๐ป ๐ฌ โซ๏ธ โ ๐ฏ **๐จโ๐ญ ๐ ๏ธ ๐** โ๏ธ. โคด๏ธ ๐ ๐ โถ๏ธ 1๏ธโฃ โ๏ธ ๐ **๐จโ๐ญ ๐ ๏ธ** โ๏ธ ๐ ๐.
& **Uvicorn** โ๏ธ **๐-๐ ๐จโ๐ญ ๐**.
โ๏ธ ๐ ๐, ๐ ๐ ๐ซ **๐ ๏ธ ๐จโ๐ผ**, ๐ ๐ **โด** & **๐ข**. & โซ๏ธ ๐ **๐ถ** ๐ป ๐จโ๐ญ ๐ ๏ธ ๐ **Uvicorn ๐**.
& โคด๏ธ ๐-๐ **Uvicorn ๐จโ๐ญ** ๐ ๐ ๐ ๐ญ ๐ ๐จ ๐ ๐ซ ๐ฉ FastAPI โ๏ธ โซ๏ธ.
## โ ๐ & Uvicorn
```console
$ pip install "uvicorn[standard]" gunicorn
---> 100%
```
๐ ๐ โ ๐ฏโโ๏ธ Uvicorn โฎ๏ธ `standard` โ ๐ฆ (๐ค โ ๐ญ) & ๐.
## ๐ ๐ โฎ๏ธ Uvicorn ๐จโ๐ญ
โคด๏ธ ๐ ๐ช ๐ ๐ โฎ๏ธ:
```console
$ gunicorn main:app --workers 4 --worker-class uvicorn.workers.UvicornWorker --bind 0.0.0.0:80
[19499] [INFO] Starting gunicorn 20.1.0
[19499] [INFO] Listening at: http://0.0.0.0:80 (19499)
[19499] [INFO] Using worker: uvicorn.workers.UvicornWorker
[19511] [INFO] Booting worker with pid: 19511
[19513] [INFO] Booting worker with pid: 19513
[19514] [INFO] Booting worker with pid: 19514
[19515] [INFO] Booting worker with pid: 19515
[19511] [INFO] Started server process [19511]
[19511] [INFO] Waiting for application startup.
[19511] [INFO] Application startup complete.
[19513] [INFO] Started server process [19513]
[19513] [INFO] Waiting for application startup.
[19513] [INFO] Application startup complete.
[19514] [INFO] Started server process [19514]
[19514] [INFO] Waiting for application startup.
[19514] [INFO] Application startup complete.
[19515] [INFO] Started server process [19515]
[19515] [INFO] Waiting for application startup.
[19515] [INFO] Application startup complete.
```
โก๏ธ ๐ โซ๏ธโ ๐ ๐ ๐ โ:
* `main:app`: ๐ ๐ โ โ๏ธ Uvicorn, `main` โ ๐ ๐น ๐ "`main`",, ๐ `main.py`. & `app` ๐ ๐ข ๐ **FastAPI** ๐ธ.
* ๐ ๐ช ๐ ๐ `main:app` ๐ ๐ `import` ๐ ๐:
```Python
from main import app
```
* , โค `main:app` ๐ ๐ ๐ `import` ๐ `from main import app`.
* `--workers`: ๐ข ๐จโ๐ญ ๐ ๏ธ โ๏ธ, ๐ ๐ ๐ Uvicorn ๐จโ๐ญ, ๐ ๐ผ, 4๏ธโฃ ๐จโ๐ญ.
* `--worker-class`: ๐-๐ ๐จโ๐ญ ๐ โ๏ธ ๐จโ๐ญ ๐ ๏ธ.
* ๐ฅ ๐ฅ ๐ถโโ๏ธ ๐ ๐ ๐ ๐ช ๐ & โ๏ธ โฎ๏ธ:
```Python
import uvicorn.workers.UvicornWorker
```
* `--bind`: ๐ ๐ฌ ๐ ๐ข & โด ๐, โ๏ธ โค (`:`) ๐ ๐ข & โด.
* ๐ฅ ๐ ๐โโ Uvicorn ๐, โฉ๏ธ `--bind 0.0.0.0:80` (๐ ๐) ๐ ๐ โ๏ธ `--host 0.0.0.0` & `--port 80`.
๐ข, ๐ ๐ช ๐ ๐ โซ๏ธ ๐ฆ **๐น** (๐ ๏ธ ๐) ๐ ๐ ๏ธ (โซ๏ธ ๐ข).
๐ ๐ช ๐ ๐:
* ๐ **๐ ๏ธ ๐จโ๐ผ** โถ๏ธ โฎ๏ธ ๐น `19499` (๐ ๐ผ โซ๏ธ ๐ ๐ ๐ข).
* โคด๏ธ โซ๏ธ โถ๏ธ `Listening at: http://0.0.0.0:80`.
* โคด๏ธ โซ๏ธ ๐ ๐ โซ๏ธ โ๏ธ โ๏ธ ๐จโ๐ญ ๐ `uvicorn.workers.UvicornWorker`.
* & โคด๏ธ โซ๏ธ โถ๏ธ **4๏ธโฃ ๐จโ๐ญ**, ๐ โฎ๏ธ ๐ฎ ๐ ๐น: `19511`, `19513`, `19514`, & `19515`.
๐ ๐ โ ๐
๐ ๏ธ **โ ๏ธ ๐ ๏ธ** & **๐** ๐ ๐ ๐ฅ ๐ ๐ง ๐ข ๐จโ๐ญ. ๐ โน ๐ โฎ๏ธ **โ** ๐ง โช๏ธโก๏ธ ๐ ๐.
๐, ๐ ๐ ๐ฒ ๐ โ๏ธ ๐ณ ๐ โ ๐ญ **โ ๐** ๐ฅ ๐ช, & **๐ โซ๏ธ ๐ ๐ด**, โ๏ธ.
## Uvicorn โฎ๏ธ ๐จโ๐ญ
Uvicorn โ๏ธ ๐ โถ๏ธ & ๐ ๐ **๐จโ๐ญ ๐ ๏ธ**.
๐, ๐, Uvicorn ๐ ๏ธ ๐ ๐จโ๐ญ ๐ ๏ธ ๐
๐ ๐ ๐. , ๐ฅ ๐ ๐ โ๏ธ ๐ ๏ธ ๐จโ๐ผ ๐ ๐ (๐ ๐), โคด๏ธ โซ๏ธ ๐ช ๐ ๐ โฎ๏ธ ๐ ๐ ๏ธ ๐จโ๐ผ.
๐ ๐ผ, ๐ ๐ ๐ โซ๏ธ ๐ ๐:
```console
$ uvicorn main:app --host 0.0.0.0 --port 8080 --workers 4
INFO: Uvicorn running on http://0.0.0.0:8080 (Press CTRL+C to quit)
INFO: Started parent process [27365]
INFO: Started server process [27368]
INFO: Waiting for application startup.
INFO: Application startup complete.
INFO: Started server process [27369]
INFO: Waiting for application startup.
INFO: Application startup complete.
INFO: Started server process [27370]
INFO: Waiting for application startup.
INFO: Application startup complete.
INFO: Started server process [27367]
INFO: Waiting for application startup.
INFO: Application startup complete.
```
๐ด ๐ ๐ ๐ฅ `--workers` ๐ฌ Uvicorn โถ๏ธ 4๏ธโฃ ๐จโ๐ญ ๐ ๏ธ.
๐ ๐ช ๐ ๐ โซ๏ธ ๐ฆ **๐น** ๐ ๐ ๏ธ, `27365` ๐ช ๐ ๏ธ (๐ **๐ ๏ธ ๐จโ๐ผ**) & 1๏ธโฃ ๐ ๐จโ๐ญ ๐ ๏ธ: `27368`, `27369`, `27370`, & `27367`.
## ๐ ๏ธ ๐ง
๐ฅ ๐ ๐ โ โ๏ธ **๐** (โ๏ธ Uvicorn) ๐ ๏ธ **Uvicorn ๐จโ๐ญ ๐ ๏ธ** **๐** ๐ ๏ธ ๐ธ, โ ๐ **๐ ๐** ๐ฝ, & ๐ช ๐ฆ **๐
๐จ**.
โช๏ธโก๏ธ ๐ ๐ ๏ธ ๐ง โช๏ธโก๏ธ ๐, โ๏ธ ๐จโ๐ญ ๐ โด๏ธ โน โฎ๏ธ **๐งฌ** ๐, & ๐ฅ ๐ โฎ๏ธ **โ**, โ๏ธ ๐ ๐ช โ ๐
๐:
* **๐โโ - ๐บ๐ธ๐**
* **๐โโ ๐ ๐ด**
* ***โ***
* ๐งฌ (๐ข ๐ ๏ธ ๐)
* **๐พ**
* **โฎ๏ธ ๐ โญ โถ๏ธ**
## ๐ฆ & โ
โญ ๐ ๐ [FastAPI ๐ฆ - โ](docker.md){.internal-link target=_blank} ๐ค ๐ ๐ฌ ๐ ๐ ๐ช โ๏ธ ๐ต ๐ **๐ ๏ธ ๐ง**.
๐ค ๐ ๐ฆ ๐ **๐ โ ๐ผ** ๐ ๐ **๐ โฎ๏ธ Uvicorn ๐จโ๐ญ** & ๐ข ๐ณ ๐ ๐ช โ ๐
๐ผ.
๐ค ๐ค ๐ ๐ฆ ๐ โ **๐ ๐ ๐ ๐ผ โช๏ธโก๏ธ ๐** ๐ ๐ Uvicorn ๐ ๏ธ (๐ต ๐). โซ๏ธ ๐
๐ ๏ธ & ๐ฒ โซ๏ธโ ๐ ๐ ๐ ๐โ โ๏ธ ๐ ๐ฆ ๐งพ โ๏ธ ๐ **Kubernetes**.
## ๐
๐ ๐ช โ๏ธ **๐** (โ๏ธ Uvicorn) ๐ ๏ธ ๐จโ๐ผ โฎ๏ธ Uvicorn ๐จโ๐ญ โ ๐ **๐-๐ ๐ฝ**, ๐ **๐ ๐ ๏ธ ๐**.
๐ ๐ช โ๏ธ ๐ ๐งฐ & ๐ญ ๐ฅ ๐ โ ๐ **๐ ๐ ๐ ๏ธ โ๏ธ** โช โ ๐
๐ ๐ ๏ธ ๐ง ๐.
โ
๐
โญ ๐ ๐ก ๐ **FastAPI** โฎ๏ธ ๐ฆ (โ
โ & Kubernetes). ๐ ๐ ๐ ๐ ๐ ๐งฐ โ๏ธ ๐
๐ โ ๐ **๐ ๏ธ ๐ง** ๐. ๐ถ