Я использовал библиотеку запросов python в течение некоторого времени, и недавно мне нужно было сделать запрос асинхронно, то есть я хотел бы отправить запрос HTTP, продолжить мой основной поток и вызвать обратный вызов когда запрос возвращается.Каким образом grequests асинхронны?
Естественно, меня привели в библиотеку 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'? – Aya
Думаю, мне, возможно, придется это сделать. Я был просто сбит с толку и хочу проверить ожидаемое поведение. – cacois
Конечно. Я просто склонен придерживаться встроенных модулей, где это возможно, чтобы обеспечить максимальную мобильность. – Aya