2016-05-28 6 views
2

Я использую grequests для асинхронной загрузки данных с веб-сайта с использованием того же URL-адреса, но с другими параметрами.Отвечают ли ответы на запросы в том же порядке, что и запросы?

Например,

unsent_requests = [] 
for param in params: # assume params is a list containing different parameters or query strings 
    unsent_requests.append(grequests.get(url = url, params = param)) 

responses = grequests.map(unsent) 

Как я могу возможно получить, чтобы узнать, какой ответ из ответов принадлежит к которым затребовать от unsent_requests? Или ответы в том же порядке, что и неотправленные запросы?

PS: response.url не дает никаких подсказок, потому что возвращается совсем другой URL-адрес.

ответ

3

Ответы находятся в том же порядке, что и запросов, как показано в usage example:

>>> reqs = [ 
... grequests.get('http://httpbin.org/delay/1', timeout=0.001), 
... grequests.get('http://fakedomain/'), 
... grequests.get('http://httpbin.org/status/500')] 
>>> grequests.map(reqs, exception_handler=exception_handler) 
Request failed 
Request failed 
[None, None, <Response [500]>] 
+0

Ты в курсе об этом? – vks

+0

[Да] (https://github.com/kennethreitz/grequests/blob/master/grequests.py#L121). – engineerC

+0

Thanx много ........... – vks

2

Нет, это не так, сама природа асинхронных запросов означает, что, несмотря на обрабатываемые в порядке, фактические ответы не гарантируется.

Вот почему ответ содержит исходный запрос, который вы можете увидеть, итерации по результатам отображения карты и ответа на печать. запрос .url.