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?