Movatterモバイル変換


[0]ホーム

URL:


Перейти к содержанию
Join theFastAPI Cloud waiting list 🚀
Follow@fastapi onX (Twitter) to stay updated
FollowFastAPI onLinkedIn to stay updated
Subscribe to theFastAPI and friends newsletter 🎉
sponsor
sponsor
sponsor
sponsor
sponsor
sponsor
sponsor
sponsor
sponsor
sponsor
sponsor

Серверные воркеры — Uvicorn с воркерами

🌐 Перевод выполнен с помощью ИИ и людей

Этот перевод был сделан ИИ под руководством людей. 🤝

В нем могут быть ошибки из-за неправильного понимания оригинального смысла или неестественности и т. д. 🤖

Вы можете улучшить этот перевод,помогая нам лучше направлять ИИ LLM.

Английская версия

Давайте снова вспомним те концепции деплоя, о которых говорили ранее:

  • Безопасность — HTTPS
  • Запуск при старте
  • Перезапуски
  • Репликация (количество запущенных процессов)
  • Память
  • Предварительные шаги перед запуском

До этого момента, следуя руководствам в документации, вы, вероятно, запускалисерверную программу, например с помощью командыfastapi, которая запускает Uvicorn водном процессе.

При деплое приложения вам, скорее всего, захочется использоватьрепликацию процессов, чтобы задействоватьнесколько ядер и иметь возможность обрабатывать больше запросов.

Как вы видели в предыдущей главе оКонцепциях деплоя, существует несколько стратегий.

Здесь я покажу, как использоватьUvicorn своркер-процессами через командуfastapi или напрямую через командуuvicorn.

Информация

Если вы используете контейнеры, например Docker или Kubernetes, я расскажу об этом подробнее в следующей главе:FastAPI в контейнерах — Docker.

В частности, при запуске вKubernetes вам, скорее всего,не понадобится использовать воркеры — вместо этого запускайтеодин процесс Uvicorn на контейнер, но об этом подробнее далее в той главе.

Несколько воркеров

Можно запустить несколько воркеров с помощью опции командной строки--workers:

Если вы используете командуfastapi:

$<fontcolor="#4E9A06">fastapi</font>run--workers4<ustyle="text-decoration-style:solid">main.py</u>  <span style="background-color:#009485"><font color="#D3D7CF"> FastAPI </font></span>  Starting production server 🚀             Searching for package file structure from directories with             <font color="#3465A4">__init__.py</font> files             Importing from <font color="#75507B">/home/user/code/</font><font color="#AD7FA8">awesomeapp</font>   <span style="background-color:#007166"><font color="#D3D7CF"> module </font></span>  🐍 main.py     <span style="background-color:#007166"><font color="#D3D7CF"> code </font></span>  Importing the FastAPI app object from the module with the             following code:             <u style="text-decoration-style:solid">from </u><u style="text-decoration-style:solid"><b>main</b></u><u style="text-decoration-style:solid"> import </u><u style="text-decoration-style:solid"><b>app</b></u>      <span style="background-color:#007166"><font color="#D3D7CF"> app </font></span>  Using import string: <font color="#3465A4">main:app</font>   <span style="background-color:#007166"><font color="#D3D7CF"> server </font></span>  Server started at <font color="#729FCF"><u style="text-decoration-style:solid">http://0.0.0.0:8000</u></font>   <span style="background-color:#007166"><font color="#D3D7CF"> server </font></span>  Documentation at <font color="#729FCF"><u style="text-decoration-style:solid">http://0.0.0.0:8000/docs</u></font>             Logs:     <span style="background-color:#007166"><font color="#D3D7CF"> INFO </font></span>  Uvicorn running on <font color="#729FCF"><u style="text-decoration-style:solid">http://0.0.0.0:8000</u></font> <b>(</b>Press CTRL+C to             quit<b>)</b>     <span style="background-color:#007166"><font color="#D3D7CF"> INFO </font></span>  Started parent process <b>[</b><font color="#34E2E2"><b>27365</b></font><b>]</b>     <span style="background-color:#007166"><font color="#D3D7CF"> INFO </font></span>  Started server process <b>[</b><font color="#34E2E2"><b>27368</b></font><b>]</b>     <span style="background-color:#007166"><font color="#D3D7CF"> INFO </font></span>  Started server process <b>[</b><font color="#34E2E2"><b>27369</b></font><b>]</b>     <span style="background-color:#007166"><font color="#D3D7CF"> INFO </font></span>  Started server process <b>[</b><font color="#34E2E2"><b>27370</b></font><b>]</b>     <span style="background-color:#007166"><font color="#D3D7CF"> INFO </font></span>  Started server process <b>[</b><font color="#34E2E2"><b>27367</b></font><b>]</b>     <span style="background-color:#007166"><font color="#D3D7CF"> INFO </font></span>  Waiting for application startup.     <span style="background-color:#007166"><font color="#D3D7CF"> INFO </font></span>  Waiting for application startup.     <span style="background-color:#007166"><font color="#D3D7CF"> INFO </font></span>  Waiting for application startup.     <span style="background-color:#007166"><font color="#D3D7CF"> INFO </font></span>  Waiting for application startup.     <span style="background-color:#007166"><font color="#D3D7CF"> INFO </font></span>  Application startup complete.     <span style="background-color:#007166"><font color="#D3D7CF"> INFO </font></span>  Application startup complete.     <span style="background-color:#007166"><font color="#D3D7CF"> INFO </font></span>  Application startup complete.     <span style="background-color:#007166"><font color="#D3D7CF"> INFO </font></span>  Application startup complete.

Если вы предпочитаете использовать командуuvicorn напрямую:

$uvicornmain:app--host0.0.0.0--port8080--workers4<font color="#A6E22E">INFO</font>:     Uvicorn running on <b>http://0.0.0.0:8080</b> (Press CTRL+C to quit)<font color="#A6E22E">INFO</font>:     Started parent process [<font color="#A1EFE4"><b>27365</b></font>]<font color="#A6E22E">INFO</font>:     Started server process [<font color="#A1EFE4">27368</font>]<font color="#A6E22E">INFO</font>:     Waiting for application startup.<font color="#A6E22E">INFO</font>:     Application startup complete.<font color="#A6E22E">INFO</font>:     Started server process [<font color="#A1EFE4">27369</font>]<font color="#A6E22E">INFO</font>:     Waiting for application startup.<font color="#A6E22E">INFO</font>:     Application startup complete.<font color="#A6E22E">INFO</font>:     Started server process [<font color="#A1EFE4">27370</font>]<font color="#A6E22E">INFO</font>:     Waiting for application startup.<font color="#A6E22E">INFO</font>:     Application startup complete.<font color="#A6E22E">INFO</font>:     Started server process [<font color="#A1EFE4">27367</font>]<font color="#A6E22E">INFO</font>:     Waiting for application startup.<font color="#A6E22E">INFO</font>:     Application startup complete.

Единственная новая опция здесь —--workers, она говорит Uvicorn запустить 4 воркер-процесса.

Также видно, что выводитсяPID каждого процесса:27365 — для родительского процесса (этоменеджер процессов) и по одному для каждого воркер-процесса:27368,27369,27370 и27367.

Концепции деплоя

Здесь вы увидели, как использовать нескольковоркеров, чтобыраспараллелить выполнение приложения, задействоватьнесколько ядер CPU и обслуживатьбольше запросов.

Из списка концепций деплоя выше использование воркеров в основном помогает срепликацией, и немного — сперезапусками, но об остальных по-прежнему нужно позаботиться:

  • Безопасность — HTTPS
  • Запуск при старте
  • Перезапуски
  • Репликация (количество запущенных процессов)
  • Память
  • Предварительные шаги перед запуском

Контейнеры и Docker

В следующей главе оFastAPI в контейнерах — Docker я объясню стратегии, которые можно использовать для решения остальныхконцепций деплоя.

Я покажу, каксобрать свой образ с нуля, чтобы запускать один процесс Uvicorn. Это простой подход и, вероятно, именно то, что вам нужно при использовании распределённой системы управления контейнерами, такой какKubernetes.

Резюме

Вы можете использовать несколько воркер-процессов с опцией командной строки--workers в командахfastapi илиuvicorn, чтобы задействоватьмногоядерные CPU, запускаянесколько процессов параллельно.

Вы можете использовать эти инструменты и идеи, если настраиваетесобственную систему деплоя и самостоятельно закрываете остальные концепции деплоя.

Перейдите к следующей главе, чтобы узнать оFastAPI в контейнерах (например, Docker и Kubernetes). Вы увидите, что эти инструменты тоже предлагают простые способы решить другиеконцепции деплоя. ✨


[8]ページ先頭

©2009-2026 Movatter.jp