gevent
Предпочтительнее использовать Gunicorn или uWSGI с рабочими процессами gevent, а не использовать gevent напрямую. Gunicorn и uWSGI предоставляют гораздо более настраиваемые и проверенные в производстве серверы.
gevent позволяет писать асинхронный код на основе корутин, который выглядит как стандартный синхронный Python. Он использует greenlet для переключения задач без написания async/await или использования asyncio.
eventlet — это ещё одна библиотека, которая делает то же самое. Некоторые зависимости, которые у вас есть, или другие соображения могут повлиять на выбор между ними.
gevent предоставляет WSGI-сервер, который может обрабатывать множество подключений одновременно вместо одного на рабочий процесс. Для получения каких-либо преимуществ от использования сервера, вы должны фактически использовать gevent в собственном коде.
Установка
При использовании gevent требуется greenlet>=1.0, в противном случае локальные переменные контекста, такие как request, не будут работать должным образом. При использовании PyPy требуется PyPy>=7.3.7.
Создайте виртуальную среду, установите своё приложение, а затем установите gevent.
$ cd hello-app $ python -m venv .venv $ . .venv/bin/activate $ pip install . # install your application $ pip install gevent
Запуск
Чтобы использовать gevent для обслуживания вашего приложения, напишите скрипт, который импортирует его WSGIServer, а также ваше приложение или фабрику приложения.
wsgi.pyfrom gevent.pywsgi import WSGIServer
from hello import create_app
app = create_app()
http_server = WSGIServer(("127.0.0.1", 8000), app)
http_server.serve_forever()
$ python wsgi.py
При запуске сервера не отображается никакой вывод.
Внешнее связывание
gevent не следует запускать от имени root, потому что это заставит код вашего приложения работать от имени root, что небезопасно. Однако это означает, что привязка к порту 80 или 443 не будет возможна. Вместо этого следует использовать обратный прокси, такой как nginx или Apache httpd, перед gevent.
Вы можете привязаться ко всем внешним IP-адресам на непривилегированном порту, используя 0.0.0.0 в аргументах сервера, показанных в предыдущем разделе. Не делайте этого при использовании настройки обратного прокси, иначе будет возможность обойти прокси.
0.0.0.0 — это не допустимый адрес для перехода, вы должны использовать конкретный IP-адрес в своём браузере.
© 2010 Pallets
Licensed under the BSD 3-clause License.
https://flask.palletsprojects.com/en/stable/deploying/gevent/