7

据我所知,和之间的区别在于map等待imap所有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)

然后不会发送一个请求。

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

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

4

1 回答 1

5

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

这不是真的。map立即执行所有请求并返回结果(这可能需要一段时间,这就是您可能说“等待所有请求完成”的原因)。

然而imap,返回一个生成器并按需执行请求。因此,您必须在发送请求之前开始迭代生成器。循环生成器以获取结果:

for single_request in r:
    # so something with "single_request"
于 2017-01-31T00:22:46.680 回答