gevent

Предпочтительнее использовать Gunicorn или uWSGI с gevent workers, чем напрямую использовать gevent. Gunicorn и uWSGI предоставляют гораздо более настраиваемые и проверенные на производстве серверы.

gevent позволяет писать асинхронный, основанный на корутинах код, который выглядит как стандартный синхронный Python. Он использует greenlet для обеспечения переключения задач без написания async/await или использования asyncio.

eventlet - это другая библиотека, которая делает то же самое. Определенные зависимости, которые у вас есть, или другие соображения могут повлиять на то, какую из двух библиотек вы решите использовать.

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

Установка

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

Создайте virtualenv, установите ваше приложение, затем установите gevent.

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

Бег

Чтобы использовать gevent для обслуживания вашего приложения, напишите сценарий, который импортирует его WSGIServer, а также ваше приложение или фабрику приложений.

wsgi.py
from 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 невозможна. Вместо этого перед gevent следует использовать обратный прокси, например nginx или Apache httpd.

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

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

Вернуться на верх