25 votos

Matraz lento en la recuperación posterior de los datos de la solicitud?

Estoy escribiendo matraz de aplicación que acepta peticiones POST con los datos json. He notado grandes diferencias en el tiempo de respuesta basado en el tamaño de los datos que se pasan a la aplicación. Después de la depuración yo redujo problema a la línea donde estaba la recuperación de datos en json, desde la petición del objeto. Puede ser importante tener en cuenta que las pruebas se realizaron en el matraz de servidor de desarrollo.

start = time.time()
resp = json.dumps(request.json)
return str(time.time() - start)

He programado esta línea y para los datos de 1024 (probablemente no es coincidencia) y menos caracteres, esto tuvo 0.002 s y para cualquier cosa a través de 1024 más de 1 segundo! ¿Qué está ocurriendo aquí? Es esta la limitación de servidor de desarrollo?

EDITAR: Lo mismo sucede para la obtención de datos de envío de la solicitud.el formulario.get('somedata') con un contenido de longitud de más de 1024

EDITAR: No podía replicar problema con el mismo ejemplo sirve Apache

EDITAR: Me empezó a cavar en Werkzeug módulo y se encontró que la lentitud se produce cuando la lectura de los mensajes de respuesta self._read(to_read) en wsgi.py módulo de la cual se transmite de BaseHTTPRequestHandler. Todavía no sabemos por qué tan lento.


He aquí los detalles del entorno: Ubuntu - 10.04 Python 2.6.5 Matraz - 0.9 Werkzeug - 0.8.3

4voto

Ryan Puntos 1718

El matraz de servidor de desarrollo se espera que sea lento. De http://flask.pocoo.org/docs/deploying/:

Usted puede utilizar el grupo builtin servidor durante el desarrollo, pero debe utilizar una implementación completa opción para las aplicaciones de producción. (No utilice el grupo builtin servidor de desarrollo en la producción.)

Como Marcus se menciona en los comentarios, otra WSGI servidor como gunicorn o tornado, sería mucho más rápido y más fiable, por lo que definitivamente el uso de uno de esos para la implementación y la evaluación comparativa.

Si usted está preocupado acerca de cómo trabajar rápidamente durante el desarrollo, puede utilizar gunicorn en el desarrollo como en la implementación. Si va a implementar heroku, por ejemplo, puede ejecutar "capataz de inicio" y la gunicorn servidor de inicio a la derecha.

2voto

iman Puntos 402

He tenido este problema en una línea como esta, que estaba tomando acerca de 1.0 segundo! En un matraz de post controlador:

username=request.form.get('username')

Yo estaba probando con curl -F:

curl -F username="x" http://127.0.0.1:5000/func

Acabo de cambiar -F a -d y se puso 0.0004 segundos!!!

curl -d username="x" http://127.0.0.1:5000/func

Creo que el frasco tiene un problema a recuperar "multipart/form-data" content-type.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by: