私はしばらくの間 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 リクエストを同時に実行し、すべてのレスポンスを単一のコールバックに送信するためのものです。これは正確ですか?