1. ホーム
  2. python

[解決済み] Pythonリクエストによる非同期リクエスト

2022-03-06 21:08:30

質問

のドキュメントに記載されているサンプルを試してみました。 リクエストライブラリ python用です。

とともに async.map(rs) レスポンスコードは取得できますが、リクエストされた各ページの内容を取得したいのです。例えばこれではうまくいきません。

out = async.map(rs)
print out[0].content

解決方法は?

注意事項

以下の回答は ではない は、v0.13.0+のリクエストに適用されます。非同期機能は grequests この質問が書かれた後に しかし、あなたは単に requestsgrequests のようにすれば、うまくいくはずです。

元の質問が、requests < v0.13.0の使用についてだったのを反映して、この回答をそのままにしています。


で複数のタスクを行うには async.map 非同期 しなければならない。

  1. 各オブジェクトで何をしたいのか、関数を定義する(あなたのタスク)。
  2. その関数をイベントフックとしてリクエストに追加します。
  3. 呼び出す async.map すべてのリクエスト/アクションのリストで

from requests import async
# If using requests > v0.13.0, use
# from grequests import async

urls = [
    'http://python-requests.org',
    'http://httpbin.org',
    'http://python-guide.org',
    'http://kennethreitz.com'
]

# A simple task to do to each response object
def do_something(response):
    print response.url

# A list to hold our things to do via async
async_list = []

for u in urls:
    # The "hooks = {..." part is where you define what you want to do
    # 
    # Note the lack of parentheses following do_something, this is
    # because the response will be used as the first argument automatically
    action_item = async.get(u, hooks = {'response' : do_something})

    # Add the task to our list of things to do via async
    async_list.append(action_item)

# Do our list of things to do via async
async.map(async_list)