使用pycurl中断上传S3

Rom*_*šil 11 python upload curl tcp amazon-s3

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

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

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

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

Jus*_*ick 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
Run Code Online (Sandbox Code Playgroud)

我建议您将结果复制/粘贴到 .txt 文件中以记下当前设置。您感兴趣的设置是 Chimney Offload、Receive-Side Scaling (RSS) 和 NetDMA。这些功能均尝试从 NIC 或 CPU 卸载处理负载,有时可能会导致出现与您所描述的症状类似的问题。

在搞乱 RSS 或 NetDMA 之前,我会尝试通过netsh int tcp set global chimney=disabledDevice Manager > Network Adapters > Advanced tab.

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