在win32使用python2.7的httplib缓慢http上传

时间:2013-11-01 10:18:31

标签: python performance winapi httplib

我正在使用python和httplib为我的文件共享服务器实现一个非常简单的文件上传器。如果文件大于1MB,则文件被分块并一次上传一个块。我的客户端和服务器之间的网络连接非常好(100mbps,<3ms延迟)。

当块大小很小(低于128kB左右)时,一切正常(> 200kB / s)。但是当我将块大小增加到256kB或更高时,与128kB分块(<20kB / s)相比,完成块大约需要10倍的时间。为了让事情变得更奇怪,这只发生在我的win32机器上(win8 x86,运行32b python)但不在我的amd64机器中(win8 amd64,运行64b python)。

经过一些评估后,我将我的搜索范围缩小到了httplib.HttpConnection的request()和getresponse()函数,因为这些是阻塞的原因。

我的第一个猜测是套接字缓冲。但是改变SO_SNDBUF和TCP_NODELAY选项并没有多大帮助。我也检查了我的服务器端,但一切正常。

我真的希望有人可以帮助我。更改http库(到pycurl)是我想做的最后一件事。提前谢谢!

1 个答案:

答案 0 :(得分:1)

原来这是与VM相关的问题。我在VM上运行我的Python代码,但是当我将相同的代码复制到运行相同Windows版本的物理机器时,问题就消失了。

由于我对VM机制完全不熟悉,如果有人可以解释为什么VM中存在这样的问题,那将会很棒。