Я использую библиотеку запросов 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-запросов и отправки всех ответов на один обратный вызов. Это точно?
urllib
и запустить его в фоновом потоке с модулемthread
? - person Aya   schedule 15.04.2013