En quoi est grequests asynchrone?

J'ai été en utilisant le python demandes de la bibliothèque pendant un certain temps, et a récemment eu besoin de faire une demande de façon asynchrone, ce qui signifie que je voudrais envoyer la requête HTTP, mon thread principal de continuer à exécuter, et ont une fonction de callback appelée lorsque la demande de retour.

Naturellement, j'ai été amené à le grequests bibliothèque (https://github.com/kennethreitz/grequests), mais je suis confus sur le comportement. Par exemple:

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

Le code ci-dessus produira la sortie suivante:

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

0
1
2
3
4
5
6
7
8
9

La grequests.map() appel de toute évidence des blocs jusqu'à ce que la réponse HTTP est disponible. Il semble probable que j'ai mal compris le "asynchrone" comportement ici, et le grequests bibliothèque est juste pour l'exécution de plusieurs requêtes HTTP simultanément et envoyer toutes les réponses à un seul rappel. Est-ce exact?

  • Pas sûr, mais vous ne pourriez pas vous suffit d'utiliser le haut- urllib module et l'exécuter dans un thread d'arrière-plan avec la thread module?
  • Je crois que j'ai à faire. J'étais dans la confusion, et que vous voulez vérifier le comportement attendu.
  • Assurez-vous. J'ai juste tendance à coller avec built-ins, si possible, afin de maximiser la portabilité.
InformationsquelleAutor cacois | 2013-04-15