W jaki sposób grequests są asynchroniczne?

Korzystam z biblioteki zapytań python od pewnego czasu, a ostatnio miałem potrzebę asynchronicznego żądania, co oznacza, że ​​chciałbym wysłać żądanie HTTP, kontynuować wykonywanie głównego wątku i wywołać wywołanie zwrotne, gdy zwraca żądanie.

Oczywiście prowadzono mnie do biblioteki grequestów (https://github.com/kennethreitz/grequests), ale jestem zdezorientowany co do zachowania. Na przykład:

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

Powyższy kod wygeneruje następujące dane wyjściowe:

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

0
1
2
3
4
5
6
7
8
9

Wywołanie grequests.map () oczywiście blokuje się, dopóki nie będzie dostępna odpowiedź HTTP. Wydaje się prawdopodobne, że źle zrozumiałem zachowanie „asynchroniczne”, a biblioteka grequests służy do jednoczesnego wykonywania wielu żądań HTTP i wysyłania wszystkich odpowiedzi na pojedyncze wywołanie zwrotne. Czy to jest dokładne?

questionAnswers(3)

yourAnswerToTheQuestion