我requests
在 celeryworkers
中使用 Python 进行大量(~10/秒)API 调用(包括 GET、POST、PUT、DELETE)。每个请求大约需要 5-10 秒才能完成。
我尝试在池中运行 celery workers,eventlet
并发 1000。
由于requests
正在阻塞进程,因此每个并发连接都在等待一个请求。
如何使requests
异步?
我requests
在 celeryworkers
中使用 Python 进行大量(~10/秒)API 调用(包括 GET、POST、PUT、DELETE)。每个请求大约需要 5-10 秒才能完成。
我尝试在池中运行 celery workers,eventlet
并发 1000。
由于requests
正在阻塞进程,因此每个并发连接都在等待一个请求。
如何使requests
异步?
使用 eventlet猴子补丁来使任何纯 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
更新:猴子修补请求库存在已知问题。如果你得到:
ImportError: cannot import name utils
,然后将导入行修改为
requests = eventlet.import_patched('requests.__init__')