0

我正在尝试并行化从远程 API 检索数据。远程 API 没有任何批量功能,因此对于我需要的每个对象,我必须发出单独的 GET 请求。

我已将 gevent 添加到组合中。有时效果很好,但如果我再次尝试相同的请求集,100 个请求中的 50 个将失败:

Traceback (most recent call last):
  ...
  File "/Users/---/venv/lib/python2.7/site-packages/httplib2/__init__.py", line 1570, in request
    (response, content) = self._request(conn, authority, uri, request_uri, method, body, headers, redirections, cachekey)
  File "/Users/---/venv/lib/python2.7/site-packages/httplib2/__init__.py", line 1317, in _request
    (response, content) = self._conn_request(conn, request_uri, method, body, headers)
  File "/Users/---/venv/lib/python2.7/site-packages/httplib2/__init__.py", line 1258, in _conn_request
    raise ServerNotFoundError("Unable to find the server at %s" % conn.host)
ServerNotFoundError: Unable to find the server at my.remote.host

<Greenlet at 0x10c6eacd0: function_name(<Object1>, <Object2>, u'zebra', True)> failed with ServerNotFoundError

有关解决此问题的方法的任何想法?这是因为太多请求太快的结果吗?如果是这样,有没有一种简单的方法来限制绿叶的数量?

4

1 回答 1

1

众所周知,Gevent 会导致一些与 python-requests 相关的 DNS 问题(您无意中错误地标记了这些问题)作为此问题的一部分。幸运的是,我们之前已经看到过这个问题,用户这样解决了

gevent.dns.resolve_ipv4('example.com')
# However you make your httplib2 call.

考虑到这一点,另一位用户指出,这可能已经在新版本的 gevent 中得到修复

不管上面的代码片段是否适合您,您都应该尝试升级 gevent 以确保它不是那样。

于 2013-10-18T13:46:41.013 回答