1

我正在使用 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)是我想做的最后一件事。提前致谢!

4

1 回答 1

1

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

由于我对VM机制完全不熟悉,如果有人能解释为什么VM中存在这样的问题,那就太好了。

于 2014-02-24T02:48:51.047 回答