gevent

Prefiera usar Gunicorn o uWSGI con trabajadores gevent en lugar de usar gevent directamente. Gunicorn y uWSGI proporcionan servidores mucho más configurables y probados en producción.

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

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

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

Instalación

Cuando se utiliza gevent, 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 gevent.

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

Ejecutando

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

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

No se muestra ninguna salida cuando el servidor se inicia.

Vinculación externa

gevent 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 gevent.

Puedes enlazar con 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.