В чем узкое место прокси-потока TCP2HTTP (urllib) ThreadingTcpServer в Python - PullRequest
0 голосов
/ 28 ноября 2010

Я реализовал прокси-сервер TCP-HTTP, используя urllib,

, который преобразует TCP-запрос в HTTP-запрос к определенному серверу,

Это примерно так:

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

Но он стал очень медленным во многих соединениях (не слишком много: около 20) одновременно.

Где узкое место? Это связано с проблемой GIL?

Кстати: я на Windows, поэтому ForkingMixin здесь недоступен

1 Ответ

0 голосов
/ 28 ноября 2010

Использовать профилировщик, один из: http://docs.python.org/library/profile.html

...