Python 中 TCP2HTTP(urllib) 代理线程TcpServer 的瓶颈是什么
我已经使用 urllib 实现了 TCP 到 HTTP 代理服务器,
它将 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 在这里不可用
I have implmented a TCP to HTTP proxy server using urllib,
which converts a TCP request to a HTTP request to a specific server,
It's something like this:
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()
But it became very slow on many connections(not too many: about 20) at the same time.
Where is the bottleneck? Is it related with GIL issue?
BTW: I'm on Windows so ForkingMixin is not available here
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
使用探查器,以下之一: http://docs.python.org/library/profile.html
Use profiler, one of: http://docs.python.org/library/profile.html