我在celery requests
中使用Python workers
来进行大量(~10 / sec)API调用(包括GET,POST,PUT,DELETE)。每个请求大约需要5到10秒才能完成。
我尝试在eventlet
池中运行芹菜工作者,并发1000次。
由于requests
是阻塞进程,因此每个并发连接都在等待一个请求。
如何使requests
异步?
答案 0 :(得分:14)
使用eventlet monkey patching使任何纯python库无阻塞。
补丁单库
# import requests # instead do this:
import eventlet
requests = eventlet.import_patched('requests')
修补所有内容
import eventlet
eventlet.monkey_patch() # must execute as early as possible
...
# everything is non-blocking now:
import requests, amqp, memcache, paramiko, redis
更新:known issue有猴子修补请求库。如果你得到:
ImportError: cannot import name utils
,然后将导入行修改为
requests = eventlet.import_patched('requests.__init__')
答案 1 :(得分:2)
来自docs:
有许多项目将请求与其中一项相结合 Python的异步框架。两个很好的例子是 grequests和requests-futures.
对于eventlet,您可以使用erequests。