【问题标题】:Are grequests responses in the same order as the requests?grequests 响应的顺序是否与请求的顺序相同?
【发布时间】:2016-05-28 18:16:35
【问题描述】:

我正在使用 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。

【问题讨论】:

    标签: python python-requests grequests


    【解决方案1】:

    响应与请求的顺序相同,如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]>]
    

    【讨论】:

    • 你确定吗?
    • 这是不正确的,请求是按顺序处理的,但结果保证不按顺序。
    • 查看源代码链接。响应数组是按顺序从请求数组构建的。虽然请求确实可能以随机顺序进行,并且它们可能以随机顺序完成,但响应数组与请求数组是一对一的按顺序匹配
    【解决方案2】:

    不,它们不是,异步请求的本质意味着尽管按顺序处理,但不能保证实际响应是按顺序进行的。

    这就是响应包含原始请求的原因,您可以通过遍历映射结果并打印响应来查看。request.url。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-04-08
      • 2022-01-16
      • 1970-01-01
      • 1970-01-01
      • 2021-12-01
      • 2021-10-27
      • 1970-01-01
      相关资源
      最近更新 更多