eventlet

Prefiero usar Gunicorn con eventlet workers en lugar de usar eventlet directamente. Gunicorn proporciona un servidor mucho más configurable y probado en producción.

eventlet permite escribir código asíncrono, basado en coroutinas, que se parece al Python síncrono estándar. Utiliza greenlet para permitir el cambio de tareas sin escribir async/await o utilizar asyncio.

gevent es otra biblioteca que hace lo mismo. Ciertas dependencias que tenga, u otras consideraciones, pueden afectar a cuál de las dos elija utilizar.

eventlet proporciona un servidor WSGI que puede manejar muchas conexiones a la vez en lugar de una por proceso de trabajo. Debes usar eventlet en tu propio código para ver algún beneficio al usar el servidor.

Instalación

Cuando se utiliza eventlet, se requiere greenlet>=1.0, de lo contrario los contextos locales como request no funcionarán como se espera. Cuando se utiliza PyPy, se requiere PyPy>=7.3.7.

Crea un virtualenv, instala tu aplicación y luego instala eventlet.

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

Ejecutando

Para usar eventlet para servir tu aplicación, escribe un script que importe su wsgi.server, así como tu app o fábrica de apps.

wsgi.py
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

Vinculación externa

eventlet no debe ejecutarse como root porque provocaría que el código de su aplicación se ejecutara como root, lo cual no es seguro. Sin embargo, esto significa que no será posible enlazar con el puerto 80 o 443. En su lugar, debe utilizarse un proxy inverso como nginx o Apache httpd delante de eventlet.

Puedes vincular todas las IPs externas en un puerto no privilegiado utilizando 0.0.0.0 en los argumentos del servidor mostrados en la sección anterior. No hagas esto cuando utilices una configuración de proxy inverso, de lo contrario será posible eludir el proxy.

0.0.0.0 no es una dirección válida para navegar, sino que debes utilizar una dirección IP específica en tu navegador.