[英]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.