2016-02-12 57 views
0

我的代码如下所示:太大的数据输出造成蟒蛇插座损坏

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

回答

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循环的一个迭代完成其工作。

+0

输入是二进制数据,readLine()对二进制数据不好。我认为问题仍然在self.wfile.write(输出+'\ n'),谢谢! – Jack

+0

啊,我猜我学到了东西!我周围看到的唯一方法是将您一次写出的金额分解。不知道二进制数据有什么好处/坏处,但是如果已经解析了输出变量,你能分割吗?将其分解成更小的块可能会解决问题。 –

+0

好的建议! – Jack