2010-11-28 5 views
0

ich ein TCP HTTP-Proxy-Server mit urllib,Was der Engpass einer TCP2HTTP (urllib) Proxy ThreadingTcpServer in Python ist

, die einer TCP-Anforderung wandelt in eine HTTP-Anforderung an einen bestimmten Server,

implmented habe es ist so etwas wie folgt aus:

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()   

Aber es wurde sehr langsam auf vielen Verbindungen (nicht zu viele: etwa 20) zur gleichen Zeit.

Wo ist der Flaschenhals? Ist es mit der GIL-Frage verbunden?

BTW: Ich bin auf Windows so ForkingMixin nicht verfügbar ist hier

+0

@ user522809: Ist nicht das HTTP-Protokoll über TCP-Protokoll. Oder zu sagen, HTTP wäre ein Protokoll auf Anwendungsebene. – pyfunc

+0

@pyfunc: Kein allgemeiner TCP2HTTP-Proxy. Es konvertiert nur bestimmte TCP-Anfragen in entsprechende HTTP-Anfragen. Sie können sagen, HTTP wird hier als Protokoll auf App-Ebene verwendet. – user522809

Antwort

0
+0

aber Threading kann nicht profilieren – user522809

+0

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

+0

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