繁体   English   中英

Celery + Eventlet +非阻塞请求

[英]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') 

    erequestsgrequests可以被剥离到这两行。

  • 一切都好

     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的异步框架结合起来。 两个很好的例子是grequestsrequests-futures。

对于eventlet,您可以使用erequests

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM