imap与grequest库中的map相对应

时间:2017-01-31 00:00:14

标签: python python-3.x python-requests gevent grequests

据我所知,mapimap之间的区别在于map等待所有请求完成,然后返回有序数据。而imap立即返回数据并且订购更少。

当我使用时:

urls = [...some_data...]
rs = (grequests.get(u,, hooks=dict(response=callback_f)) for u in urls)
r = grequests.map(rs)
只要所有请求都完成,就会使用挂钩,并调用回调函数。

当我使用时:

urls = [...some_data...]
rs = (grequests.get(u,, hooks=dict(response=callback_f)) for u in urls)
r = grequests.imap(rs)

然后没有发送任何一个请求。

根据文档图和imap有着相同的API。

这是预期的行为吗?我不应该使用带有imap的钩子吗? 我使用的是Python 3.5。

1 个答案:

答案 0 :(得分:4)

  

据我所知,mapimap之间的区别在于map等待所有请求完成,然后返回有序数据。而imap立即返回数据并且订购更少。

这不是真的。 map立即执行所有请求并返回结果(这可能需要一段时间,这就是为什么你可能会说"等待所有请求完成")。

imap按需。所以你必须遍历结果才能得到它们(但每次迭代只发出一个请求):

for single_request in r:
    # so something with "single_request"