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

sh0*_*731 6 python-3.x python-requests

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

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

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

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

Tom*_*zky 4

getaddrinfo我认为除了信号之外不可能中断底层C 标准库函数。

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

@timeout_decorator.timeout(5, use_signals=False)
def timed_get(url):
  return requests.get(url)
Run Code Online (Sandbox Code Playgroud)

但请记住,这将为每个请求创建一个进程。