Python 在(大型)文件上载时重置连接

Python 在(大型)文件上载时重置连接,python,pylons,paste,paster,Python,Pylons,Paste,Paster,所以我有一个相当恼人的问题,我希望有人能帮助我上传文件。最初我发布这个问题时认为这是一个与挂架有关的问题,但后来我得出结论,这个问题是由于服务器造成的,即粘贴,我已经准确地跟踪了问题发生的位置,但不确定如何解决它。行为如下。我有一个通过paster提供服务的Pylons web应用程序。应用程序的一部分允许用户将文件上传到系统,有时这些文件可能相当大(>50mb)。在这样的上传过程中,服务器偶尔会重置连接(即,在Chrome中,错误显示为“error 101(net::ERR_connectio

所以我有一个相当恼人的问题,我希望有人能帮助我上传文件。最初我发布这个问题时认为这是一个与挂架有关的问题,但后来我得出结论,这个问题是由于服务器造成的,即粘贴,我已经准确地跟踪了问题发生的位置,但不确定如何解决它。行为如下。我有一个通过paster提供服务的Pylons web应用程序。应用程序的一部分允许用户将文件上传到系统,有时这些文件可能相当大(>50mb)。在这样的上传过程中,服务器偶尔会重置连接(即,在Chrome中,错误显示为“error 101(net::ERR_connection_RESET):连接被重置。”),这并不总是发生,只有大约50%的时间会发生在较大的文件中

在这些情况下,服务器从不将POST交给应用程序级别。没有抛出异常(至少我能找到)。我已经将问题缩小到cascade.py(特别是从httpserver.py调用的wsgi_应用程序方法)。从后者:

结果=self.server.wsgi\u应用程序(self.wsgi\u环境,self.wsgi\u启动\u响应)

在cascade.py的调用函数中,文件似乎被写入临时文件。相关循环从以下位置开始:

当复制长度>0时:

然后,它将块逐个写入打开的文件。这些写入都不会单独引发异常。然而,在这些写入过程中,服务器通常只是“离开”,似乎是随机的(时间似乎也与此无关)。因此,如果我打印出正在减小的副本大小,我会看到它减小到某一点,然后服务器突然发送一个“连接重置”(或者至少客户端认为是这样),并且方法似乎已退出(副本停止打印,就好像循环已退出,尽管它不是0)

我完全被难住了,因为1)这只是偶尔发生的,2)我似乎无法追踪到实际的错误/异常——它只是有点。。。死亡


如果重要的话,我正在运行paste 1.7.3、Python2.7和Fedora操作系统。有没有人对可能发生的事情有任何见解,以及我如何解决这个问题?非常感谢您的帮助。

我想到了两个主意

  • 使用另一个更健壮的Web服务器进行测试,例如。如果需要,它可以并发运行。查看问题是否仍然存在。虽然“粘贴”可以处理web应用程序,但据我所知,它并不意味着可以处理巨大的文件传输
  • 在上传过程中,您是否正在使用

    • 我在Ubuntu 10.04上使用apache 2.2+mod_python 3.3没有问题。我成功上传了大文件(400mb)


      我曾经构建过html上传表单。

      +1这可能是web服务器问题,而不是python/pylons问题。