我的代码如下:
class TCPHandler(SocketServer.StreamRequestHandler):
def handle(self):
while True:
self.data = self.rfile.read()
output = parse(self.data)
self.wfile.write(output+'\n')
输出数据非常大,约5MB。它导致以下异常:
self.wfile.write(output+'\n')
File "/usr/lib64/python2.6/socket.py", line 324, in write
self.flush()
File "/usr/lib64/python2.6/socket.py", line 303, in flush
self._sock.sendall(buffer(data, write_offset, buffer_size))
error: [Errno 32] Broken pipe
我应该在函数wfile.write()中添加一些参数。 请提出任何想法,提前谢谢!
答案 0 :(得分:2)
当您说
时,您正在阅读大量内容self.data = self.rfile.read()
您将正在阅读的整个内容加载到该变量中。整件事。这是read()的缺点。为了减轻负担,可以考虑使用readline()进行for循环,然后解析/编写它。这样,您的计算机在任何给定点处理的数量都要少得多。
for line in self.rfile.readline():
output = parse(line)
self.wfile.write(output+'\n')
另外,不确定为什么while循环存在,因为代码应该通过while循环的一次迭代来完成它的工作。