2010-11-28 28 views
0

J'implmented un TCP au serveur proxy HTTP à l'aide urllib,Quel est le goulot d'étranglement d'un TCP2HTTP (urllib) Proxy ThreadingTcpServer en Python

qui convertit une requête TCP à une requête HTTP à un serveur spécifique,

il est quelque chose comme ceci:

class RequestHandler(socketserver.BaseRequestHandler): 

    def handle(self): 
     size, = struct.unpack('L', s.recv(4)) 
     data = s.recv(size) 
     assert len(data) == size 
     res = urllib.urlopen('http://myserver.com/', encode_data(data)).read() 
     s.sendall(res) 
     s.shutdown(SHUT_WR) 

if __name__ == '__main__': 
    address = ('', 8080) 
    server = socketserver.ThreadingTCPServer(address, RequestHandler) 
    server.serve_forever()   

Mais il est devenu très lent sur de nombreuses connexions (pas trop: 20) en même temps.

Où est le goulot d'étranglement? Est-ce lié au problème de GIL?

BTW: Je suis sous Windows si ForkingMixin n'est pas ici

+0

@ user522809: est-ce pas le protocole HTTP sur le protocole TCP. Ou pour dire, HTTP serait un protocole au niveau de l'application. – pyfunc

+0

@pyfunc: pas un proxy TCP2HTTP général. Il convertit seulement une requête TCP spécifique en requête HTTP correspondante. Vous pouvez dire que HTTP est utilisé ici comme un protocole de niveau d'application. – user522809

Répondre

0
+0

mais le thread ne peut pas profiler – user522809

+0

http://docs.python.org/library/threading.html#threading.setprofile – Lex

+0

http://stackoverflow.com/questions/582336/how-can-you-profile-a- script python/1922945 # 1922945 – Lex