python multithreading web-services web.py

python - Usar web.py como servidor http no bloqueante



multithreading web-services (4)

mientras aprendía algo de programación básica con Python, encontré web.py. me quedé atrapado con un problema estúpido:

Escribí una aplicación de consola simple con un bucle principal que procesa los elementos de una cola en hilos separados. Mi objetivo es usar web.py para agregar elementos a mi cola e informar el estado de la cola a través de la solicitud web. Lo tengo funcionando como un módulo pero no puedo integrarlo en mi aplicación principal. mi problema es cuando inicio el servidor http con app.run () bloquea mi ciclo principal. También intenté iniciarlo con thread.start_new_thread pero aún bloquea. ¿Existe alguna manera fácil de ejecutar el servidor http integrado de web.py en segundo plano dentro de mi aplicación?

en el caso probable de que yo sea víctima de un malentendido fundamental, cualquier intento de aclarar mi error de razonamiento ayudaría;) (por favor, tengan paciencia, soy un principiante :-)


No sería más sencillo volver a escribir el código del bucle principal para que sea una función a la que llame una y otra vez, y luego llamar a eso desde la función que pase a ...

Se garantiza que no satisfará completamente sus requisitos, pero si tiene prisa, podría ser más fácil.


o simplemente use Tornado, un servidor web no bloqueante para Python que tiene una API similar a la webpy - http://www.tornadoweb.org/


Encontré una solución de trabajo. En un módulo separado, creo mi servidor web:

import web import threading class MyWebserver(threading.Thread): def run (self): urls = (''/'', ''MyWebserver'') app = web.application(urls, globals()) app.run() def POST ...

En el programa principal solo llamo

MyWebserver().start()

y continuar con lo que quiera mientras el servidor web funciona en segundo plano.


Recientemente también he usado Beanstalkd para poner en cola tareas que se ejecutarán en un hilo separado. Su controlador web.py simplemente inserta un trabajo en una tubería y se ejecuta una secuencia de comandos completamente separada. Puede tener cualquier cantidad de estos y obtendrá los beneficios del control de cola avanzado, etc.