3

任务是:

1)send an http get to url based on a parameter
2)Modify the response based on the same parameter
3)send an http post to url based on the same parameter

我目前是通过 requests 库来做这个的,但是一个一个做这个需要很多时间,最多可以达到 20000 个。

我尝试过multiprocessing,但由于某种原因,它在发送 5000-10000 次获取和发布后挂起。

我读到了 grequest,但它在那里说 Order of these responses does not map to the order of the requests you send out.。我需要订单,因为我必须根据我发送的 get 修改每个回复。

这里最好的选择是什么?我也读过,threading,tornado但是因为我把我的第一种方法搞砸了,multiprocessing我想在再次开始之前确定一下

4

1 回答 1

1

这是一个解决方案,它允许您使用 grequest 的 imap(理论上比 grequest 的 map 函数更快)并知道将响应映射到请求的索引。感谢在项目的 GitHub 问题上提出的问题

from functools import partial

def callback(index, response, **kwargs):
    response.image_index = index

rs = [
    grequests.get(
        url,
        callback=partial(callback, index)
    )
    for index, url in enumerate(urls)
]

您应该能够根据自己的需要进行定制。

编辑:我成功地使用了这个hooks

grequests.get(
        url,hooks={'response': partial(process_response, index)})
于 2016-11-28T07:01:14.850 回答