Various timeouts for python httplib
我正在实现一个从各种服务器获取网页的小服务。我需要能够配置不同类型的超时。我尝试使用
我需要为初始DNS查找指定超时。我明白这是在我开始实例化
我的代码是以这样的方式编写的,即我首先
你试过请求吗?
您可以方便地设置超时http://docs.python-requests.org/en/latest/user/quickstart/#timeouts
1 | >>> requests.get('http://github.com', timeout=0.001) |
编辑:
我错过了问题的第2部分。 为此你可以使用这个:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | import sys import signal import requests class TimeoutException(Exception): pass def get_timeout(url, dns_timeout=10, load_timeout=60): def timeout_handler(signum, frame): raise TimeoutException() signal.signal(signal.SIGALRM, timeout_handler) signal.alarm(load_timeout) # triger alarm in seconds try: response = requests.get(url, timeout=dns_timeout) except TimeoutException: return"you're taking too long" return response |
并在您的代码中使用
如果您需要超时可用于其他功能,您可以创建装饰器。
以上代码来自http://pguides.net/python-tutorial/python-timeout-a-function/。
我建议您查看http://pycurl.sourceforge.net/和http://curl.haxx.se/libcurl/c/curl_easy_setopt.html#CURLOPTTIMEOUT选项。
http://curl.haxx.se/libcurl/c/curl_easy_setopt.html#CURLOPT_NOSIGNAL选项听起来也很有趣:
Consider building libcurl with c-ares support to enable asynchronous DNS lookups, which enables nice timeouts for name resolves without signals.