擅长:python、mysql、java
<p>使用eventlet<a href="http://eventlet.net/doc/patching.html" rel="noreferrer">monkey patching</a>使任何纯python库不阻塞。</p>
<ul>
<li><p>修补单个库</p>
<pre class="lang-py prettyprint-override"><code># import requests # instead do this:
import eventlet
requests = eventlet.import_patched('requests')
</code></pre>
<p>可以将包<a href="https://pypi.org/project/erequests/" rel="noreferrer">erequests</a>和<a href="https://pypi.org/project/grequests/" rel="noreferrer">grequests</a>拆分为这两行。</p></li>
<li><p>修补所有内容</p>
<pre class="lang-py prettyprint-override"><code>import eventlet
eventlet.monkey_patch() # must execute as early as possible
...
# everything is non-blocking now:
import requests, amqp, memcache, paramiko, redis
</code></pre></li>
</ul>
<p><strong>更新</strong>:有带猴子修补请求库的<a href="https://github.com/eventlet/eventlet/issues/7" rel="noreferrer">known issue</a>。如果你得到:</p>
<pre><code>ImportError: cannot import name utils
</code></pre>
<p>,然后将导入行修改为</p>
<pre class="lang-py prettyprint-override"><code>requests = eventlet.import_patched('requests.__init__')
</code></pre>