Spec-Zone.ru › Werkzeug 2.3

Gunicorn

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

  • Он, как правило, легко интегрируется с платформами хостинга.
  • Он не поддерживает 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 рабочий процесс, что, вероятно, не то, что вы хотите для типа рабочего процесса по умолчанию.

Логи для каждого запроса по умолчанию не отображаются, отображается только информация и ошибки рабочих процессов. Чтобы отобразить логи доступа в stdout, используйте опцию --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. Это не то же самое, что Python’s async/await, или спецификация 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 Pallets
Licensed under the BSD 3-clause License.
https://werkzeug.palletsprojects.com/en/latest/deployment/gunicorn/

Spec-Zone.ru

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