擅长:python、mysql、java
<p>所以,我在这里回答,也许它会帮助其他人。</p>
<p>在我的例子中,这不是目标服务器的速率限制,而是更简单的事情:我没有显式地关闭响应,因此它们保持套接字打开,python进程没有文件句柄。</p>
<p>我的解决方案(不确定哪一个解决了这个问题——理论上他们两个都应该这么做)是:</p>
<ul>
<li><p>在<code>grequests.get</code>中设置<code>stream=False</code>:</p>
<pre><code>rs = (grequests.get(u, stream=False) for u in urls)
</code></pre></li>
<li><p>读取response.content后显式调用<code>response.close()</code>:</p>
<pre><code>responses = grequests.map(rs)
for response in responses:
make_use_of(response.content)
response.close()
</code></pre></li>
</ul>
<p><strong>注意:</strong>仅仅销毁<code>response</code>对象(将<code>None</code>分配给它,调用<code>gc.collect()</code>)是不够的-这没有关闭文件处理程序。</p>