Как подавить Grequests при выполнении асинхронных вызовов API? - PullRequest
0 голосов
/ 24 августа 2018

Я использую библиотеку grequests для передачи ~ 250000 URL-адресов для получения данных из API.

API имеет ограничение в 100 вызовов в секунду.

Как мне регулировать скорость, чтобы пропускать только 100 URL в секунду?Я увеличил параметр размера с 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 голосов
/ 14 июля 2019

Grequests, кажется, делает 100 запросов, а затем без ожидания делает еще 100 запросов и так далее.Между этими запросами не определено время.Вот аналогичная проблема, описанная с решением: Ограничение / регулирование скорости HTTP-запросов в GRequests

...