hostprofi.ru
Подобрать хостинг
Термин·буква G

Gunicorn

краткое определение

Gunicorn (Green Unicorn) — Python WSGI HTTP-сервер для Unix-систем. Запускает Python-приложения (Django, Flask, FastAPI через WSGI/ASGI адаптер) в нескольких рабочих процессах. Стандартный выбор для production-деплоя Python-приложений за nginx-прокси.

Gunicorn (Green Unicorn) — Python-реализация WSGI (Web Server Gateway Interface) HTTP-сервера, портированная с Ruby Unicorn. Предназначен для запуска Python веб-приложений в production-среде. Gunicorn управляет пулом рабочих процессов (workers), каждый из которых обрабатывает HTTP-запросы через WSGI-интерфейс приложения. Запуск на VPS или выделенном сервере — стандартная среда для production.

Как работает

Gunicorn использует модель pre-fork: master-процесс принимает соединения и передаёт их воркерам через Unix-сокет или TCP. Воркеры — отдельные Python-процессы (или потоки/greenthreads при использовании gevent/eventlet). Master перезапускает упавших воркеров автоматически.

Типы воркеров:

  • sync (по умолчанию) — один запрос за раз на воркер. Надёжно для CPU-bound задач.
  • gthread — многопоточный воркер. Каждый воркер обрабатывает несколько запросов параллельно через потоки.
  • gevent/eventlet — кооперативная многозадачность через greenlets. Эффективно для I/O-bound приложений.
  • uvicorn.workers.UvicornWorker — ASGI-воркер для асинхронных приложений (FastAPI, Starlette, Django Channels).

Запуск: gunicorn -w 4 -b 127.0.0.1:8000 myapp.wsgi:application. Рекомендуемое количество воркеров: 2 * CPU + 1. На сервере с 4 ядрами — 9 воркеров.

Gunicorn не обрабатывает статические файлы, SSL, HTTP/2 — эти задачи выполняет фронтенд-прокси (nginx). Типичная связка в production: nginx → unix socket → Gunicorn → Django/Flask app.

История

Gunicorn создан Бенуа Шено в 2009 году как портирование Ruby Unicorn. Активно используется в связке с nginx как фронтенд-прокси начиная с 2010 года. Изначально поддерживал только WSGI (PEP 3333). С версией 20.0 (2020) добавлена поддержка Python 3 как основной платформы. WSGI определён в PEP 333 (2003) и обновлён в PEP 3333 (2010). ASGI (Asynchronous Server Gateway Interface, PEP на основе Django Channels) появился в 2015 году для async Python.

Gunicorn vs uWSGI vs uvicorn

СерверПротоколAsyncКонфигурация
GunicornWSGI (+ASGI через воркер)Опционально (uvicorn worker)Простая
uWSGIWSGI, uwsgi, HTTPНет нативногоСложная, богатая
uvicornASGIНативно (asyncio)Простая

На что обращать внимание

Настройте timeout: по умолчанию 30 секунд. Длинные запросы (импорт данных, генерация PDF) — увеличьте до 120-300 секунд. Graceful reload без потери запросов: kill -HUP $GUNICORN_PID или systemctl reload. Настройте cron-задачу или systemd для автоматического перезапуска при сбое. В Docker Gunicorn запускайте через CMD без systemd — в контейнере он должен быть PID 1 или запускаться через init-обёртку. Логи Gunicorn пишутся в stdout/stderr — стандарт для контейнерных сред.

Мониторинг и логи

Gunicorn пишет access-логи и error-логи в stdout/stderr по умолчанию. В связке с systemd логи попадают в journald: journalctl -u gunicorn. При использовании Dockerdocker logs. Для мониторинга числа воркеров и нагрузки используйте statsd-интеграцию Gunicorn или мониторинг сервера через Prometheus + process_exporter. Число активных воркеров: ps aux | grep gunicorn | wc -l.

Другие термины