2010-06-08 4 views
6

La aplicación de escritorio debe iniciar el servidor web al iniciarse y debe cerrarse al cerrar.cuál es la forma recomendada de ejecutar un servidor web incrustado dentro de una aplicación de escritorio (digamos servidor wsgi con pyqt)

Suponiendo que el escritorio es el único cliente autorizado para conectarse al servidor web, ¿cuál es la mejor manera de escribir esto?

Tanto el servidor web como el escritorio se ejecutan en un bucle de bloqueo propio. Entonces, ¿debería usar hilos o multiprocesamiento?

Respuesta

6

Use algo como CherryPy o paste.httpserver. Puede usar el servidor de wsgiref, y generalmente funciona bien localmente, pero si está haciendo Ajax, la naturaleza de subproceso único de wsgiref puede causar algunos resultados extraños, o si alguna vez hace una subpetición obtendrá una condición de carrera. Pero para la mayoría de los casos estará bien. Es podría ser útil para que no tenga un servidor incrustado de subprocesos (tanto CherryPy como paste.httpserver están enhebrados), en cuyo caso wsgiref sería útil (todas las solicitudes se ejecutarán desde el mismo subproceso).

Tenga en cuenta que si usa CherryPy o paste.httpserver todas las solicitudes se realizarán automáticamente en subprocesos (esos paquetes generan el hilo), y probablemente no podrá tocar directamente el código GUI desde su código web (ya que el código GUI generalmente no le gusta ser manejado por hilos). Para cualquiera de ellos, el código del servidor bloquea, por lo que debe generar un hilo para iniciar el servidor. Twisted puede ejecutarse en el ciclo de eventos GUI normal, pero a menos que sea importante, agrega mucha complejidad.

No utilice BaseHTTPServer o SimpleHTTPServer, son tontos y complicados y en todos los casos de donde podría utilizar, en ese caso debería usar wsgiref. Cada caso individual, ya que wsgiref tiene una API sana (WSGI), mientras que estos servidores tienen API absurdas.

+0

Este script (http://bitbucket.org/julian/hatta-mirror/src/tip/hatta_gtkicon.py) se acerca mucho a lo que estaba buscando. Utiliza wsgiref también. – btbytes

1

En Sauce RC, usamos CherryPy. Como es puro Python, es muy fácil de integrar (como fuente en el disco o en un archivo zip).

Cuestiones relacionadas