# 伺服器工作處理序 - 使用 Uvicorn Workers { #server-workers-uvicorn-with-workers }
我們回顧一下先前提到的部署概念:
* 安全 - HTTPS
* 系統啟動時執行
* 重啟
* **副本(正在執行的處理序數量)**
* 記憶體
* 啟動前的前置作業
到目前為止,依照文件中的教學,你大多是透過 `fastapi` 指令啟動一個執行 Uvicorn 的**伺服器程式**,且只跑**單一處理序**。
在部署應用時,你通常會希望有一些**處理序的複製**來善用**多核心**,並能處理更多請求。
如同前一章關於 [部署概念](concepts.md) 所示,你可以採用多種策略。
這裡會示範如何使用 `fastapi` 指令或直接使用 `uvicorn` 指令,搭配 **Uvicorn** 的**工作處理序**(worker processes)。
/// note
如果你使用容器(例如 Docker 或 Kubernetes),我會在下一章說明更多:[容器中的 FastAPI - Docker](docker.md)。
特別是,在 **Kubernetes** 上執行時,你多半會**不要**使用 workers,而是每個容器只跑一個 **Uvicorn 單一處理序**。我會在該章節中進一步說明。
///
## 多個工作處理序 { #multiple-workers }
你可以用命令列選項 `--workers` 來啟動多個 workers:
//// tab | `fastapi`
如果你使用 `fastapi` 指令:
```console
$ fastapi run --workers 4 main.py
FastAPI Starting production server 🚀
Searching for package file structure from directories with
__init__.py files
Importing from /home/user/code/awesomeapp
module 🐍 main.py
code Importing the FastAPI app object from the module with the
following code:
from main import app
app Using import string: main:app
server Server started at http://0.0.0.0:8000
server Documentation at http://0.0.0.0:8000/docs
Logs:
INFO Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to
quit)
INFO Started parent process [27365]
INFO Started server process [27368]
INFO Started server process [27369]
INFO Started server process [27370]
INFO Started server process [27367]
INFO Waiting for application startup.
INFO Waiting for application startup.
INFO Waiting for application startup.
INFO Waiting for application startup.
INFO Application startup complete.
INFO Application startup complete.
INFO Application startup complete.
INFO Application startup complete.
```
////
//// tab | `uvicorn`
如果你偏好直接使用 `uvicorn` 指令:
```console
$ uv run 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 個工作處理序。
你也會看到它顯示每個處理序的 **PID**,`27365` 是父處理序(這是**處理序管理器**),另外每個工作處理序各有一個:`27368`、`27369`、`27370` 和 `27367`。
## 部署概念 { #deployment-concepts }
你已經看到如何使用多個 **workers** 來將應用的執行進行**平行化**,善用 CPU 的**多核心**,並能服務**更多請求**。
在上面的部署概念清單中,使用 workers 主要能幫助到**副本**這一塊,並對**重啟**也有一點幫助,但你仍需要處理其他部分:
* **安全 - HTTPS**
* **系統啟動時執行**
* ***重啟***
* 副本(正在執行的處理序數量)
* **記憶體**
* **啟動前的前置作業**
## 容器與 Docker { #containers-and-docker }
在下一章 [容器中的 FastAPI - Docker](docker.md) 我會說明一些策略,幫你處理其他的**部署概念**。
我會示範如何**從零建立你的映像檔**來執行單一 Uvicorn 處理序。這個流程相當簡單,而且在使用像 **Kubernetes** 這類分散式容器管理系統時,大多情況也會這麼做。
## 重點回顧 { #recap }
你可以在 `fastapi` 或 `uvicorn` 指令中使用 `--workers` 這個 CLI 選項來啟動多個工作處理序,以善用**多核心 CPU**,**平行**執行多個處理序。
如果你要自行建置**自己的部署系統**,你可以運用這些工具與想法,同時自行處理其他部署概念。
接著看看下一章關於在容器(例如 Docker 與 Kubernetes)中使用 **FastAPI**。你會看到那些工具也有簡單的方法來解決其他**部署概念**。✨