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 указывает, как загрузить ваше приложение Flask. Синтаксис — {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–2022 Pallets
Licensed under the BSD 3-clause License.
https://flask.palletsprojects.com/en/2.2.x/deploying/gunicorn/