imap与grequest库中的map相对应

max*_*max 6 python gevent python-3.x python-requests grequests

据我知道的区别map,并imapmap等待所有请求完成,然后返回有序数据.而imap立即返回数据并减少订单.

我用的时候:

urls = [...some_data...]
rs = (grequests.get(u,, hooks=dict(response=callback_f)) for u in urls)
r = grequests.map(rs)
Run Code Online (Sandbox Code Playgroud)

所有请求完成后立即使用挂钩,并调用回调函数.

我用的时候:

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

然后没有发送单个请求.

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

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

MSe*_*ert 5

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

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

但是imap返回一个生成器并根据需要执行请求。所以你必须在发送请求之前开始迭代生成器。循环生成器以获得结果:

for single_request in r:
    # so something with "single_request"
Run Code Online (Sandbox Code Playgroud)

  • 它有一个参数“size”来指定应该同时完成多少请求。至少根据 [`grequests.imap` on "Nullege Python Samples"](http://nullege.com/codes/search/grequests.imap) (2认同)