无法发送大文件Python

2024-09-28 21:03:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图为一个类实现一个简单的epollweb服务器。在我尝试发送一个大文件之前,一切都很好。我注意到它发送了大约2/3的数据,然后只是坐在那里什么也不做。这就是我如何确保我的所有数据都已发送:

def sendResponse(self,fd,response):
    if response:
        totalsent = 0
        MSGLEN = len(response)
        while totalsent < MSGLEN:
            sent = self.clients[fd].send(response[totalsent:])
            if sent == 0:
                raise RuntimeError("socket connection broken")
            totalsent = totalsent + sent
    else:
        self.poller.unregister(fd)
        self.clients[fd].close()
        del self.clients[fd]

我有没有在中小型文件中提到过这个作品。我只注意到当试图发送1.7mbs或更大的文件时会中断。在


Tags: 文件数据self服务器lenifresponsedef
1条回答
网友
1楼 · 发布于 2024-09-28 21:03:19

如果可以,请跳过重新发明轮子和使用ZeroMQ消息传递层的阶段。在

您可能会忘记您的领域和问题的所有精力都集中在这一点上。ZeroMQ提供了一个概念和一组现成的工具,用于添加(几乎)线性的可扩展性、资源池、故障恢复能力、更高层的抽象协议等等。在

对于最初的一块蛋糕,从Nicholas Piel尝一尝

花一周时间阅读Pieters Hintjens的《代码连接,第一卷》将向您介绍一个分布式处理的新世界,您已经准备好了,只需准备好重新使用大师的专业知识。在

你得到了什么?

极快的速度,无论是几个字节还是几GB的blob,低延迟等等,所有这些都来自于这样一个简单的代码:

def sendResponse( self, aZmqConnectionToCounterparty, response ):
     if response:
          try:
              aZmqConnectionToCounterparty.send( response, zmq.NOBLOCK )
          except ZMQerror:
              ''' handle ZMQerror   '''
          except ValueError:
              ''' handle ValueError '''
          except TypeError:
              ''' handle TypeError  '''
    ...

PyZMQ文档内容如下:

^{pr2}$

相关问题 更多 >