Spec-Zone.ru › Werkzeug 2.2

Gunicorn

Gunicorn — это чистый WSGI-сервер на Python с простой конфигурацией и множеством реализаций рабочих процессов для настройки производительности.

  • Он, как правило, легко интегрируется с платформами хостинга.
  • Он не поддерживает Windows (но работает в WSL).
  • Его легко установить, так как он не требует дополнительных зависимостей или компиляции.
  • Он имеет встроенную поддержку асинхронных рабочих процессов с использованием gevent или eventlet.

Эта страница описывает основы запуска Gunicorn. Обязательно ознакомьтесь с его документацией и используйте gunicorn --help для понимания доступных функций.

Установка

Gunicorn легко установить, так как он не требует внешних зависимостей или компиляции. Он работает в Windows только в WSL.

Создайте виртуальную среду, установите свое приложение, а затем установите gunicorn.

$ cd hello-app
$ python -m venv venv
$ . venv/bin/activate
$ pip install .  # install your application
$ pip install gunicorn

Запуск

Единственный необходимый аргумент для Gunicorn указывает, как загрузить ваше приложение. Синтаксис — {module_import}:{app_variable}. module_import — это импортируемое имя модуля с вашим приложением. app_variable — это переменная с приложением. Также может быть вызов функции (с любыми аргументами), если вы используете шаблон фабрики приложений.

# equivalent to 'from hello import app'
$ gunicorn -w 4 'hello:app'

# equivalent to 'from hello import create_app; create_app()'
$ gunicorn -w 4 'hello:create_app()'

Starting gunicorn 20.1.0
Listening at: http://127.0.0.1:8000 (x)
Using worker: sync
Booting worker with pid: x
Booting worker with pid: x
Booting worker with pid: x
Booting worker with pid: x

Опция -w задает количество запущенных процессов; начальное значение может быть CPU * 2. По умолчанию используется только 1 рабочий процесс, что, вероятно, не то, что вам нужно для типа рабочего процесса по умолчанию.

Журналы для каждого запроса по умолчанию не отображаются, отображается только информация и ошибки о рабочих процессах. Чтобы отобразить журналы доступа в стандартный вывод, используйте опцию --access-logfile=-.

Внешнее подключение

Gunicorn не следует запускать от имени пользователя root, так как это приведет к запуску вашего кода приложения от имени root, что небезопасно. Однако это означает, что невозможно подключиться к порту 80 или 443. Вместо этого следует использовать обратный прокси, например, nginx или Apache httpd перед Gunicorn.

Вы можете подключиться ко всем внешним IP-адресам на не привилегированном порту, используя опцию -b 0.0.0.0. Не делайте этого при использовании настройки обратного прокси, иначе это позволит обойти прокси.

$ gunicorn -w 4 -b 0.0.0.0 'hello:create_app()'
Listening at: http://0.0.0.0:8000 (x)

0.0.0.0 — это недопустимый адрес для перехода, в браузере вы бы использовали определённый IP-адрес.

Асинхронный режим с gevent или eventlet

Синхронный рабочий процесс по умолчанию подходит для многих случаев использования. Если вам нужна асинхронная поддержка, Gunicorn предоставляет рабочие процессы, использующие либо gevent, либо eventlet. Это не то же самое, что async/await Python или спецификация сервера ASGI. Для получения преимущества от использования рабочих процессов необходимо использовать gevent/eventlet в собственном коде.

При использовании gevent или eventlet требуется greenlet>=1.0, в противном случае контекстные локальные переменные, такие как request, не будут работать должным образом. При использовании PyPy требуется PyPy>=7.3.7.

Для использования gevent:

$ gunicorn -k gevent 'hello:create_app()'
Starting gunicorn 20.1.0
Listening at: http://127.0.0.1:8000 (x)
Using worker: gevent
Booting worker with pid: x

Для использования eventlet:

$ gunicorn -k eventlet 'hello:create_app()'
Starting gunicorn 20.1.0
Listening at: http://127.0.0.1:8000 (x)
Using worker: eventlet
Booting worker with pid: x

© 2007–2022 Pallets
Licensed under the BSD 3-clause License.
https://werkzeug.palletsprojects.com/en/2.2.x/deployment/gunicorn/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API