Серверные воркеры — 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). Вы увидите, что эти инструменты тоже предлагают простые способы решить другиеконцепции деплоя. ✨







