如何在python的请求库上强制超时(包括DNS查找)

时间:2017-07-24 22:17:44

标签: python-3.x python-requests

Python的请求库仅支持连接读取的超时 http://docs.python-requests.org/en/master/user/advanced/#timeouts

DNS查找需要很长时间时,无法强制超时。我想在超过X秒完成GET请求(包括DNS,连接和读取)时触发超时。

请注意,我不能使用基于信号的方法,因为它仅适用于主线程。

我正在寻找一个优雅的解决方案。

1 个答案:

答案 0 :(得分:3)

我不认为可以中断除信号之外的基础getaddrinfo C标准库函数。

所以恕我直言,你只能用多处理来克服你的问题 - 例如使用timeout_decorator模块的优雅方法:

@timeout_decorator.timeout(5, use_signals=False)
def timed_get(url):
  return requests.get(url)

但请记住,这会为每个请求创建一个流程。