requests
セロリでPythonを使用しworkers
て、多数の(〜10 /秒)API呼び出し(GET、POST、PUT、DELETEを含む)を行っています。各リクエストが完了するまでに約 5 ~ 10 秒かかります。
eventlet
プールで 1000 の同時実行性でセロリ ワーカーを実行してみました。
requests
プロセスをブロックしているため、各同時接続は 1 つの要求を待機しています。
どうすればrequests
非同期にできますか?
requests
セロリでPythonを使用しworkers
て、多数の(〜10 /秒)API呼び出し(GET、POST、PUT、DELETEを含む)を行っています。各リクエストが完了するまでに約 5 ~ 10 秒かかります。
eventlet
プールで 1000 の同時実行性でセロリ ワーカーを実行してみました。
requests
プロセスをブロックしているため、各同時接続は 1 つの要求を待機しています。
どうすれば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__')
ドキュメントから:
Requests を Python の非同期性フレームワークの 1 つと組み合わせたプロジェクトはたくさんあります。2 つの優れた例は、 grequestとrequests-future です。
特に eventlet の場合はerequestsを使用できます。