进行异步API调用时如何限制Grequest?

时间:2018-08-24 13:48:42

标签: python python-3.x asynchronous api-design sendasynchronousrequest

我正在使用grequests库传递〜250000个url从api获取数据。

API每秒限制100个调用。

我如何限制grequest每秒仅传入100个网址?我将大小参数从5增加到100。不知道该怎么做,但仍会出现错误“最大重试次数”。

到目前为止,这是我的代码:

import grequests

lst = ['url.com','url2.com']

class Test:
    def __init__(self):
        self.urls = lst

    def exception(self, request, exception):
        print ("Problem: {}: {}".format(request.url, exception))

    def async(self):
        return grequests.map((grequests.get(u) for u in self.urls), exception_handler=self.exception, size=100)

    def collate_responses(self, results):
        return [x.text for x in results]

test = Test()
#here we collect the results returned by the async function
results = test.async()

response_text = test.collate_responses(results)

1 个答案:

答案 0 :(得分:1)

请求似乎发出了100个请求,然后没有任何等待就发出了另外100个请求,依此类推。在这些请求之间没有时间定义。 这是解决方案中描述的类似问题: Limiting/throttling the rate of HTTP requests in GRequests