[英]Celery + Eventlet + non blocking requests
我在芹菜workers
使用Python requests
来进行大量(~10 /秒)API调用(包括GET,POST,PUT,DELETE)。 每个请求大约需要5到10秒才能完成。
我尝试在eventlet
池中运行芹菜工作eventlet
,具有1000个并发性。
由于requests
是阻塞进程,因此每个并发连接都在等待一个请求。
如何异步requests
?
使用eventlet monkey补丁使任何纯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__')
来自文档 :
有很多项目将Requests与Python的异步框架结合起来。 两个很好的例子是grequests和requests-futures。
对于eventlet,您可以使用erequests 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.