eventlet¶
Предпочтительнее использовать Gunicorn с eventlet workers, чем напрямую eventlet. Gunicorn предоставляет гораздо более настраиваемый и проверенный на производстве сервер.
eventlet позволяет писать асинхронный, основанный на корутинах код, который выглядит как стандартный синхронный Python. Он использует greenlet для обеспечения переключения задач без написания async/await
или использования asyncio
.
gevent - это другая библиотека, которая делает то же самое. Определенные зависимости, которые у вас есть, или другие соображения могут повлиять на то, какую из двух библиотек вы решите использовать.
eventlet предоставляет сервер WSGI, который может обрабатывать множество соединений одновременно вместо одного на рабочий процесс. Вы должны действительно использовать eventlet в своем собственном коде, чтобы увидеть какую-либо выгоду от использования сервера.
Установка¶
При использовании eventlet требуется greenlet>=1.0, иначе контекстные локали, такие как request
, не будут работать так, как ожидается. При использовании PyPy требуется PyPy>=7.3.7.
Создайте virtualenv, установите ваше приложение, затем установите eventlet
.
$ cd hello-app
$ python -m venv venv
$ . venv/bin/activate
$ pip install . # install your application
$ pip install eventlet
Бег¶
Чтобы использовать eventlet для обслуживания вашего приложения, напишите сценарий, который импортирует его wsgi.server
, а также ваше приложение или фабрику приложений.
import eventlet
from eventlet import wsgi
from hello import create_app
app = create_app()
wsgi.server(eventlet.listen(("127.0.0.1", 8000), app)
$ python wsgi.py
(x) wsgi starting up on http://127.0.0.1:8000
Внешнее связывание¶
eventlet не следует запускать от имени root, поскольку это приведет к тому, что код вашего приложения будет выполняться от имени root, что небезопасно. Однако это означает, что привязка к порту 80 или 443 невозможна. Вместо этого перед eventlet следует использовать обратный прокси, такой как nginx или Apache httpd.
Вы можете привязаться ко всем внешним IP на непривилегированном порту, используя 0.0.0.0
в аргументах сервера, показанных в предыдущем разделе. Не делайте этого при использовании обратного прокси, иначе можно будет обойти прокси.
0.0.0.0
не является действительным адресом для перехода, вы должны использовать конкретный IP-адрес в браузере.