使用pycurl中断上传S3

时间:2013-02-05 02:24:15

标签: python curl tcp upload amazon-s3

我正在使用pycurl作为boto Python库的后端。它非常快速且功能多样,但我遇到的问题是上传大文件经常在连接重置时失败。当我使用普通boto与普通httplib时,它更可靠。

我使用Wireshark发现的是,经过一段时间(或有时很快),我的机器停止从S3接收ACK,因此它会重置连接。似乎pycurl几乎是如此之快以至于扼杀了连接。如果我限制上传(我使用多接口)或使用较慢的互联网连接,上传运行正常。

我仍然想知道我可能做错了什么。

我还尝试使用.NET S3 SDK上传。它慢了3倍,但成功了。此外,它全部在Windows 7上,同一网络上的OS X机器再次上传速度慢得多,但可靠。

1 个答案:

答案 0 :(得分:3)

由于您提到您在Windows 7上遇到此问题,是否可以以管理员身份运行命令提示符并发布netsh int tcp show global的结果?你应该看到如下内容:

TCP Global Parameters
----------------------------------------------
Receive-Side Scaling State          : enabled
Chimney Offload State               : automatic
NetDMA State                        : enabled
Direct Cache Acess (DCA)            : disabled
Receive Window Auto-Tuning Level    : normal
Add-On Congestion Control Provider  : none
ECN Capability                      : disabled
RFC 1323 Timestamps                 : disabled

我建议您将结果复制/粘贴到.txt文件中,以记下您当前的设置。您感兴趣的设置是烟囱卸载,接收侧扩展(RSS)和NetDMA。这些都是尝试从/向NIC或CPU卸载处理的所有功能,它们有时会导致出现类似于您所描述的症状的问题。

在搞乱RSS或NetDMA之前,我会尝试通过运行netsh int tcp set global chimney=disabled并在Device Manager > Network Adapters > Advanced tab下禁用TCP卸载来禁用Chimney Offload。

如果这不能解决您的问题,您可能需要尝试其他两个选项。这是一个Microsoft KB article,其中包含有关修改所有这些内容的详细信息。