0

我有一个需要检索的 API 的 ~250K url 列表。

我已经使用grequests它完全按照我想要的方式制作了一个类,除了,我认为它工作得太快了,因为在运行了整个 URL 列表后我得到了错误:

Problem: url: HTTPSConnectionPool(host='url', port=123): Max retries exceeded with url: url (Caused by NewConnectionError('<urllib3.connection.VerifiedHTTPSConnection object at 0x38f466c18>: Failed to establish a new connection: [Errno 8] nodename nor servname provided, or not known',))

到目前为止的代码:

import grequests

lst = ['url','url2',url3']

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=5)


    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()

如何减慢代码速度以防止“最大重试错误”?或者更好的是如何将我拥有的列表分块并以块的形式传递 URL?

在mac上使用python3.6。

编辑:

问题不重复,必须将许多 URL 传递到同一个端点。

4

1 回答 1

1

尝试用循环替换 greqeusts.map 并添加睡眠

for u in self.urls:
  req = grequests.get(u)
  job = grequests.send(req)
  sleep(5)

睡眠解决了类似的问题

于 2018-08-23T17:29:40.567 回答