43

私はしばらくの間 Python リクエスト ライブラリを使用してきましたが、最近非同期でリクエストを作成する必要がありました。つまり、HTTP リクエストを送信し、メイン スレッドを引き続き実行し、リクエストが返ってきます。

当然、grequests ライブラリ ( https://github.com/kennethreitz/grequests ) に誘導されましたが、動作に戸惑っています。例えば:

import grequests

def print_res(res):
    from pprint import pprint
    pprint (vars(res))

req = grequests.get('http://www.codehenge.net/blog', hooks=dict(response=print_res))
res = grequests.map([req])

for i in range(10):
    print i

上記のコードは、次の出力を生成します。

<...large HTTP response output...>

0
1
2
3
4
5
6
7
8
9

grequests.map() 呼び出しは、HTTP 応答が利用可能になるまで明らかにブロックされます。ここで「非同期」の動作を誤解しているようです。grequests ライブラリは、複数の HTTP リクエストを同時に実行し、すべてのレスポンスを単一のコールバックに送信するためのものです。これは正確ですか?

4

3 に答える 3