2010-07-02 9 views
6

Sé que cherrypy es una aplicación multiproceso y también tiene una implementación de subprocesos.
Así que quería probar un ejemplo que muestra el comportamiento multiproceso.
Ahora digamos que tengo a mi alguna función en la clase raíz y descansar todas las cosas están configurados
Ejemplo multiproceso de Cherrypy

def testPage(self, *args, **kwargs): 
    current = threading.currentThread() 
    print 'Starting ' , current 
    time.sleep(5) 
    print 'Ending ' ,current 
    return '<html>Hello World</html>' 

Ahora digamos que tengo mi página como http://localhost:6060/root/testPage en 3-4 pestañas del navegador.
Qué resultado que consigo es

Starting <WorkerThread(CP WSGIServer Thread-10, started 4844)> 
Ending <WorkerThread(CP WSGIServer Thread-10, started 4844)> 
Starting <WorkerThread(CP WSGIServer Thread-7, started 4841)> 
Ending <WorkerThread(CP WSGIServer Thread-7, started 4841)> 
Starting <WorkerThread(CP WSGIServer Thread-10, started 4844)> 
Ending <WorkerThread(CP WSGIServer Thread-10, started 4844)> 

Lo que puedo entender claramente que se está creando nuevos temas para procesar cada nueva petición, pero no puedo entender por qué cada vez que tengo
de partida ... ending..starting ..ending
y por qué no comenzar ... starting..ending..ending sometimes
Porque mi suposición es que time.sleep hará que un hilo se suspenda y otro puede ejecutarse en ese momento.

+0

Deberías probar con un software específico, p. httperf: httperf --server = 127.0.0.1 --port = 6060 --num-conn = 50 --rate = 10 –

Respuesta

2

Esto es casi seguro que es una limitación de su navegador y no de CherryPy. Firefox 2, por ejemplo, no realizará más de 2 solicitudes concurrentes al mismo dominio, incluso con varias pestañas. Y si cada pestaña también está buscando un favicon ... eso deja un hit a la vez en tu controlador.

Consulte http://www.cherrypy.org/ticket/550 para obtener un boleto con un código fuente similar y una prueba más larga.