跳至内容

服务器工作者 - Uvicorn 协程

让我们回顾一下之前的部署概念

  • 安全性 - HTTPS
  • 启动时运行
  • 重启
  • 复制(运行的进程数量)
  • 内存
  • 启动之前的步骤

到目前为止,通过文档中的所有教程,你可能一直在运行一个 **服务器程序**,例如,使用 fastapi 命令,该命令运行 Uvicorn,运行一个 **单进程**。

在部署应用程序时,你可能希望进行一些 **进程复制**,以利用 **多核** 并能够处理更多请求。

如你之前在关于 部署概念 的章节中所见,你可以使用多种策略。

在这里,我将向你展示如何使用 **Uvicorn** 和 **工作进程**,使用 fastapi 命令或直接使用 uvicorn 命令。

信息

如果你使用容器,例如使用 Docker 或 Kubernetes,我将在下一章中详细介绍:容器中的 FastAPI - Docker

特别是,在 **Kubernetes** 上运行时,你可能 **不希望** 使用工作进程,而是 **每个容器运行一个 Uvicorn 进程**,但我会在后面章节中详细说明。

多个工作者

你可以使用 --workers 命令行选项启动多个工作者

如果你使用 fastapi 命令

fast →
 fastapi run --workers 4 main.py
INFO Using path main.py
INFO Resolved absolute path /home/user/code/awesomeapp/main.py
INFO Searching for package file structure from directories with __init__.py files
INFO Importing from /home/user/code/awesomeapp

╭─ Python module file ─╮
│ │
│ 🐍 main.py │
│ │
╰──────────────────────╯

INFO Importing module main
INFO Found importable FastAPI app

╭─ Importable FastAPI app ─╮
│ │
from main import app
│ │
╰──────────────────────────╯

INFO Using import string main:app

╭─────────── FastAPI CLI - Production mode ───────────╮
│ │
│ Serving at: http://0.0.0.0:8000 │
│ │
│ API docs: http://0.0.0.0:8000/docs │
│ │
│ Running in production mode, for development use: │
│ │
fastapi dev
│ │
╰─────────────────────────────────────────────────────╯

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: 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.


restart ↻

如果你更喜欢直接使用 uvicorn 命令

fast →uvicorn main:app --host 0.0.0.0 --port 8080 --workers 4INFO: 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.

restart ↻

这里唯一的新选项是 --workers,它告诉 Uvicorn 启动 4 个工作进程。

你还可以看到它显示了每个进程的 **PID**,27365 代表父进程(这是 **进程管理器**),每个工作进程一个:27368273692737027367

部署概念

在这里你看到了如何使用多个 **工作者** 来 **并行化** 应用程序的执行,利用 **CPU 中的多核**,并能够 **服务更多请求**。

从上面的部署概念列表来看,使用工作者主要可以帮助 **复制** 部分,以及 **重启** 部分,但你需要注意其他部分

  • 安全性 - HTTPS
  • 启动时运行
  • 重启
  • 复制(运行的进程数量)
  • 内存
  • 启动之前的步骤

容器和 Docker

在下一章关于 容器中的 FastAPI - Docker 的章节中,我将解释一些你可以用来处理其他 **部署概念** 的策略。

我将向你展示如何 **从头开始构建自己的镜像** 来运行一个 Uvicorn 进程。这是一个简单的过程,可能是在使用像 **Kubernetes** 这样的分布式容器管理系统时你想要做的事情。

回顾

你可以使用 fastapiuvicorn 命令的 --workers CLI 选项来使用多个工作进程,以利用 **多核 CPU**,并行运行 **多个进程**。

如果您正在构建自己的部署系统,同时自己处理其他部署概念,您可以使用这些工具和想法。

查看下一章,了解带有容器(例如 Docker 和 Kubernetes)的FastAPI。您会发现这些工具也有简单的方法来解决其他部署概念。✨

Was this page helpful?