python - jsonify - flask restful example
Frasco lento para recuperar los datos de la publicaciĆ³n de la solicitud? (2)
Estoy escribiendo una aplicación de matraz que acepta solicitudes POST con datos json. Noté grandes diferencias en el tiempo de respuesta en función del tamaño de los datos que se pasan a la aplicación. Después de la depuración reduje el problema a la línea donde estaba recuperando los datos json del objeto de solicitud. Puede ser importante tener en cuenta que las pruebas se realizaron en el servidor de desarrollo del matraz.
start = time.time()
resp = json.dumps(request.json)
return str(time.time() - start)
Calculé esta línea y para datos de 1024 (probablemente no coincidencia) y menos caracteres esto tomó 0.002s y para cualquier cosa más de 1024 durante 1 segundo. ¿Que está sucediendo aquí? ¿Es esta la limitación del servidor de desarrollo?
EDITAR: Lo mismo sucede para obtener datos POST a través de request.form.get (''somedata'') con un contenido de más de 1024
EDITAR: No pude replicar el problema con el mismo ejemplo servido por Apache
EDITAR: Empecé a buscar en el módulo Werkzeug y encontré que la lentitud se produce al leer el mensaje de respuesta self._read(to_read)
en el módulo wsgi.py que se pasa desde BaseHTTPRequestHandler. Todavía no sé por qué tan lento.
Aquí están los detalles del entorno: Ubuntu - 10.04 Python - 2.6.5 Flask - 0.9 Werkzeug - 0.8.3
Se espera que el servidor de desarrollo del matraz sea lento. De http://flask.pocoo.org/docs/deploying/ :
Puede usar el servidor incorporado durante el desarrollo, pero debe usar una opción de implementación completa para las aplicaciones de producción. (No use el servidor de desarrollo integrado en producción).
Como Marcus mencionó en los comentarios, otro servidor de WSGI como el gunicornio o el tornado sería mucho más rápido y más confiable, así que definitivamente use uno de esos para despliegue y benchmarking.
Si le preocupa trabajar rápidamente durante el desarrollo, puede usar el desarrollo de gunicorn como lo haría en la implementación. Si está implementando en heroku, por ejemplo, puede ejecutar "foreman start" y el servidor de gunicornio comenzará inmediatamente.
Tuve este problema en una línea como esta, ¡me tomó aproximadamente 1,0 segundos! Está en un manejador de correos del matraz:
username=request.form.get(''username'')
Lo estaba probando con curl-F:
curl -F username="x" http://127.0.0.1:5000/func
¡Acabo de cambiar de -F a -d y tengo 0.0004 segundos!
curl -d username="x" http://127.0.0.1:5000/func
Creo que el matraz tiene un problema para recuperar el tipo de contenido "multipart / form-data".