太大的数据输出导致python套接字损坏

时间:2016-02-12 05:03:08

标签: python sockets

我的代码如下:

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()中添加一些参数。 请提出任何想法,提前谢谢!

1 个答案:

答案 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循环的一次迭代来完成它的工作。