Instalación y configuración de Python uWSGI
Este artículo explica principalmente cómo desplegar aplicaciones WSGI simples y frameworks web comunes.
Tomando como ejemplo Ubuntu/Debian, primero instale los paquetes de dependencia:
apt-get install build-essential python-dev
Instalación de uWSGI para Python
1. A través del comando pip:
pip install uwsgi
2. Descargar el script de instalación:
curl http://uwsgi.it/install | bash -s default /tmp/uwsgi
Instale el binario de uWSGI en /tmp/uwsgi; puede modificarlo.
3. Instalación desde el código fuente:
wget http://projects.unbit.it/downloads/uwsgi-latest.tar.gz tar zxvf uwsgi-latest.tar.gz cd uwsgi-latest make
Una vez completada la instalación, obtendrá un archivo binario uwsgi en el directorio actual.
La primera aplicación WSGI
Empecemos con un sencillo 'Hello World'; cree el archivo foobar.py, el código es el siguiente:
def application(env, start_response):
start_response('200 OK', [('Content-Type','text/html')])
return [b"Hello World"]
La función predeterminada que buscará el cargador Python de uWSGIapplication 。
A continuación, inicie uWSGI para ejecutar un servidor HTTP y despliegue el programa en el puerto HTTP 9090:
uwsgi --http :9090 --wsgi-file foobar.py
Agregar concurrencia y monitoreo
De forma predeterminada, uWSGI inicia un solo proceso y un solo hilo.
Puede usar--processesla opción para agregar más procesos, o usar--threadsla opción para agregar más hilos, y también puede usar ambos al mismo tiempo.
uwsgi --http :9090 --wsgi-file foobar.py --master --processes 4 --threads 2
El comando anterior generará 4 procesos, cada uno con 2 hilos.
Si desea realizar tareas de monitoreo, puede usar el subsistema stats; el formato de datos de monitoreo es JSON:
uwsgi --http :9090 --wsgi-file foobar.py --master --processes 4 --threads 2 --stats 127.0.0.1:9191
Podemos instalar uwsgitop (similar al comando top de Linux) para ver los datos de monitoreo:
pip install uwsgitop
Uso junto con un servidor web
Podemos combinar uWSGI con el servidor web Nginx para lograr un mayor rendimiento de concurrencia.
Una configuración común de nginx es la siguiente:
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:3031;
}
El código anterior significa que las solicitudes web recibidas por nginx se pasan al servicio uWSGI en el puerto 3031 para su procesamiento.
Ahora, podemos generar uWSGI para usar localmente el protocolo uwsgi:
uwsgi --socket 127.0.0.1:3031 --wsgi-file foobar.py --master --processes 4 --threads 2 --stats 127.0.0.1:9191
Si su servidor web utiliza HTTP, entonces debe indicar a uWSGI que use el protocolo http localmente (esto es diferente de –http, que generará un proxy por sí mismo):
uwsgi --http-socket 127.0.0.1:3031 --wsgi-file foobar.py --master --processes 4 --threads 2 --stats 127.0.0.1:9191
Desplegar Django
Django es el framework web de Python más utilizado; supongamos que el proyecto Django está ubicado en /home/foobar/myproject:
uwsgi --socket 127.0.0.1:3031 --chdir /home/foobar/myproject/ --wsgi-file myproject/wsgi.py --master --processes 4 --threads 2 --stats 127.0.0.1:9191
--chdirSe utiliza para especificar la ruta del proyecto.
Podemos convertir el comando anterior en un archivo de configuración yourfile.ini:
[uwsgi] socket = 127.0.0.1:3031 chdir = /home/foobar/myproject/ wsgi-file = myproject/wsgi.py processes = 4 threads = 2 stats = 127.0.0.1:9191
A continuación, solo necesita ejecutar el siguiente comando:
uwsgi yourfile.ini
Desplegar Flask
Flask es un popular framework web de Python.
Cree el archivo myflaskapp.py, el código es el siguiente:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return "<span style='color:red'>I am app 1</span>"
Ejecute el siguiente comando:
uwsgi --socket 127.0.0.1:3031 --wsgi-file myflaskapp.py --callable app --processes 4 --threads 2 --stats 127.0.0.1:9191Otras extensiones