擅长:python、mysql、java
<p>问题很可能是请求库下面的Python<code>httplib</code>代码。在</p>
<p>在旧的Python版本(2.2)中,分块编码流是很糟糕的,现在已经很糟糕了。通过直接在套接字上使用定制的http层替换它,并更好地处理缓冲区,我可以让一个应用程序以2%的CPU进行流式传输,就像在快速的网络链路上使用完全的链路一样。由于缓冲效率非常低,Httplib只能达到大约1mb/s,CPU使用率为50%或更多。httplib对于短请求很好,但是对于大量上传(没有调整/黑客攻击)就不太好了。在</p>
<p>根据您的网络和操作系统设置,您可以尝试一些方法来改进:</p>
<ol>
<li><p>通过<code>setsockoption</code><code>SO_SNDBUF</code>优化您的套接字缓冲区,如果您不需要很多连接,并且有一个快速网络,则可以使用4MB或更大的内存,以减少快速管道(10GE及更多)上总是空缓冲区的问题。</p></li>
<li><p>使用不同的http库(例如pycurl或Twisted,带有一些补丁)并使用更大的缓冲区进行传输,例如,让每个<code>socket.send()</code>调用移动几MB的数据,而不是一些小的4kB缓冲区。</p></li>
</ol>
<p>如果操作正确,Python几乎可以完全利用10ge链接。在</p>