Параметр workers
Параметр workers указывается в командной строке при запуске
приложения через uvicorn и определяет число рабочих процессов,
которые будут одновременно обслуживать входящие запросы.
Каждый процесс запускает отдельный экземпляр приложения
и работает независимо от остальных.
По умолчанию используется один процесс.
Значение параметра передаётся как целое число.
Обычно количество процессов берут равным числу ядер процессора
или вычисляют по формуле (2 × ядра) + 1.
При использовании workers нужно учитывать,
что глобальные переменные и кэш в памяти не разделяются между процессами.
Синтаксис
uvicorn main:app --workers N
Пример
Давайте запустим приложение с четырьмя рабочими процессами. Сначала создадим файл приложения:
from fastapi import FastAPI
app = FastAPI()
@app.get('/')
def index():
return {'text': 'hello'}
Теперь запустим сервер с параметром workers:
uvicorn main:app --workers 4
В консоли увидим, что поднялось четыре процесса:
Started parent process [12345]
Started server process [12346]
Started server process [12347]
Started server process [12348]
Started server process [12349]
Waiting for application startup.
Application startup complete.
Пример
Давайте посмотрим, как параметр workers сочетается
с автоматической перезагрузкой. Создадим приложение:
from fastapi import FastAPI
app = FastAPI()
@app.get('/user/{name}')
def user(name: str):
return {'name': name}
Запустим сервер с двумя процессами и флагом --reload:
uvicorn main:app --workers 2 --reload
Результат запроса к адресу /user/abcde:
{"name": "abcde"}