5

yo estaba tratando de hacer un proxy HTTP usando BaseHttpServer que se basa en SocketServer que consiguió 2 asíncrono Mixins (ThreadingMixIn y ForkingMixIn)¿hay algún grupo para ThreadingMixIn y ForkingMixIn para SocketServer?

el problema con los dos que trabajan en cada solicitud (asignar un nuevo hilo o tenedor un nuevo subproceso para cada solicitud)

¿Hay un Mixin que utilice un grupo de, digamos, 4 subprocesos y 40 subprocesos en cada para que las solicitudes sean manejadas por esos hilos ya creados?

porque esto supondría un gran aumento de rendimiento y supongo que ahorraría algunos recursos.

Respuesta

1

He comenzado un proyecto que resuelve este problema

https://github.com/muayyad-alsadi/python-PooledProcessMixIn

Tal vez usted quiere unirse a terminar el Todos (limpiar después CTRL + C)

+0

Necesitaría compararlo con servidores basados ​​en eventos como https://pypi.python.org/pypi/Spawning/ –

+0

Esto ya no funciona usando py 2.7. Me aparece este error al probar tu demo: pickle.PicklingError: No se puede guardar en salmuera : no se encuentra como thread.lock – OriginalCliche

+0

Estoy usando py 2.7, y mi código no guarda nada –

5

se puede utilizar una piscina desde concurrent.futures (en stdlib desde Python 3.2):

from BaseHTTPServer import HTTPServer, test 
from SimpleHTTPServer import SimpleHTTPRequestHandler 
from SocketServer  import ThreadingMixIn 

from concurrent.futures import ThreadPoolExecutor # pip install futures 

class PoolMixIn(ThreadingMixIn): 
    def process_request(self, request, client_address): 
     self.pool.submit(self.process_request_thread, request, client_address) 

def main(): 
    class PoolHTTPServer(PoolMixIn, HTTPServer): 
     pool = ThreadPoolExecutor(max_workers=40) 

    test(HandlerClass=SimpleHTTPRequestHandler, ServerClass=PoolHTTPServer) 

if __name__=="__main__": 
    main() 

Como se puede ver la puesta en práctica de un caso de roscado es bastante trivial.

Si lo guarda a server.py entonces se podría ejecutar como:

$ python -mserver 

Este comando utiliza hasta 40 hebras para atender las peticiones de http://your_host:8000/.

El caso de uso principal de HTTPServer es para realizar pruebas.

+0

this es similar al uso del grupo de multiprocesamiento, y esta no es la solución óptima, por ejemplo, implica colas y pepinillos ... etc. Consulte las funciones de [mi solución] (https://github.com/muayyad-alsadi/python-PooledProcessMixIn/wiki). –

+0

@muayyad: 1. esto, así como las clases stdlib son para fines de desarrollo/prueba 2. Puedo esperar que lo anterior funcione debido a su simplicidad. No puedo decir lo mismo acerca de su solución 3. ¿Tiene algún punto de referencia? – jfs

+1

@ j-f-sebastian: He usado el sitio de referencia, dobla el rendimiento (tasa de transferencia de minas: 1530, otras mezclas alrededor de 800) –

Cuestiones relacionadas