连接重置(大)文件上载

时间:2011-08-31 14:13:29

标签: python pylons paste paster

所以我对Pylons中的文件上传有一个相当棘手的问题,我希望有人可以帮助我。最初我发布问题here认为这是Pylons的一个问题,但我已经得出结论,问题是由于服务器,即粘贴,我已经确切地追踪问题发生的地方,但我不确定如何解决它。行为如下。我有一个Pylons网络应用程序,我通过贴纸服务。应用程序的一部分允许用户将文件上载到系统,有时这些可能相当大(> 50mb)。在上传期间,服务器偶尔会重置连接(例如,在Chrome中,错误显示为“错误101(net :: ERR_CONNECTION_RESET):连接已重置。”。)这不会始终发生,仅约有50%的时间用于较大的文件。

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

  

result = self.server.wsgi_application(self.wsgi_environ,self.wsgi_start_response)

在cascade.py的调用函数中,该文件似乎被写入临时文件。相关循环从:

开始
  

而copy_len> 0:

然后将块逐个写入打开的文件。这些写入都不会引发异常。但是,服务器通常只是在这些写入期间“消失”,似乎是随机的(时间似乎与此无关)。因此,如果我打印出正在递减的copy_len大小,我会看到它减少到一个点,然后服务器突然发送“连接重置”(或者至少客户认为它)和方法似乎已退出(copy_len不再打印,好像循环已退出,但不是0)。

我完全难过,因为1)这只是偶尔发生,2)我似乎无法追查实际的错误/例外 - 它只是......死了。

如果重要,我正在运行paste 1.7.3,Python 2.7和Fedora OS。有没有人对可能发生的事情有任何了解,以及我如何能够解决这个问题?非常感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

想到两个想法......

  • 使用其他更强大的网络服务器进行测试,例如nginx。如果需要,它可以同时运行。查看问题是否仍然存在。虽然粘贴可以处理Web应用程序,但据我所知,它并不意味着处理大量文件传输。
  • 您在上传过程中使用的是Chunked Transfer Encoding吗?

答案 1 :(得分:0)

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

我使用uploader来构建html上传表单。