imap 与 grequests 库中的地图

imap vs. map in grequests library

据我所知,mapimap 之间的区别是 map 等待所有请求完成,然后 returns 订购数据。而 imap returns 数据立即减少订购。

当我使用:

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)

然后没有发送一个请求。

根据文档 map 和 imap 完全相同 API。

这是预期的行为吗?我不应该在 imap 上使用 hooks 吗? 我正在使用 Python 3.5.

As far as I know the difference between map and imap is that map waits for all requests to finish and then returns the ordered data. Whereas imap returns data immediately and order less.

这不是真的。 map 立即执行所有请求并 returns 结果(这可能需要一段时间,所以这就是为什么你可能会说 "waits for all requests to finish")。

但是 imap returns 一个生成器并且 按需执行请求。因此,您必须在发送请求之前开始遍历生成器。遍历生成器以获得结果:

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