2011-10-29 11 views
5

Estoy ejecutando django en un contenedor wsgi retorcido. Obviamente, estoy evitando todas las cosas asincrónicas con diferimientos dentro de mi código django porque de acuerdo con la documentación, las habilidades de sincronización no están permitidas dentro de las aplicaciones WSGI.Uso de palabras retorcidas en un contenedor WSGI

Sin embargo, me gustaría usar twisted.words dentro de mi aplicación WSGI para enviar solicitudes a un servidor jabber. ¿Esto cuenta como algo sincronizado o puedo usarlo dentro de mi aplicación? ¿Qué podría pasar si enviara solicitudes de jabber twisted.words a un servidor xmpp dentro de un WSGI de todos modos?

Además, tengo una pregunta más general. ¿Existe algún motivo por el que el contenedor WSGI retorcido sea multiproceso (es multihilo?) Ya que es bien sabido que el GIL de python solo reduce el rendimiento general de un script con hilos.

Gracias por cualquier respuesta.

Respuesta

0

Para invocar una función en el bucle de evento principal (hilo de E/S) en Twisted desde otro hilo (hilo no I/O, es decir, un hilo de aplicación WSGI) puede usar reactor.callFromThread(). Si desea esperar los resultados, utilice threads.blockingCallFromThread(). Por lo tanto, puede llamar a las funciones que usan twisted.words Ver Using Threads in Twisted.

Para saber si un contenedor de wsgi es de subprocesos múltiples, inspeccione wsgi.multithread y devuelva verdadero para contenedores retorcidos.

Los contenedores WSGI son multiproceso para admitir más de una solicitud a la vez (no es estrictamente necesario pero hace la vida más fácil usando el software existente). De lo contrario (si no usa otros medios para resolverlo) su servidor completo bloquea mientras su controlador de solicitudes espera una respuesta de una base de datos. A algunas personas les resulta más sencillo escribir a los manejadores de solicitudes sin preocuparse por bloquear otras solicitudes si no hay muchas solicitudes simultáneas.

Funciones en Python que realizan trabajos intensivos en CPU cuando el rendimiento importa, pueden usar bibliotecas que liberan GIL durante los cálculos o descargarlos a otros procesos. Las E/S de red y de disco que son frecuentes en las aplicaciones web suelen ser mucho más lentas que la CPU.