【发布时间】:2017-05-03 16:22:15
【问题描述】:
这是我的项目的简单演示:
import requests
import json, time
import socket
socket.setdefaulttimeout(2)
def request(url, msg=None, timeout=2, method="get"):
flag, resp = False, None
try:
if method == "get":
resp = requests.get(url, params=msg, timeout=timeout, verify=False)
elif method == "post":
resp = requests.post(url, data=msg, timeout=timeout, verify=False)
elif method == "delete":
s=requests.Session()
resp = s.delete(url, data=msg, timeout=timeout, verify=False)
flag = True
except requests.exceptions.Timeout:
resp = "time_out"
except requests.exceptions.TooManyRedirects:
resp = "too_many_redirect"
except requests.ConnectionError as err:
resp = "connection_error"
except requests.exceptions.RequestException as err:
resp = str(err.__class__.__name__)
return flag, resp
if __name__ == '__main__':
while True:
print request("https://www.google.com", timeout=1)
time.sleep(1)
运行一段时间后,进程会阻塞,当我 pstack 时,我总是看到这个:
Thread 3 (Thread 0x7f465f310700 (LWP 22537)):
#0 0x00000030dd0e993d in recvmsg () from /lib64/libc.so.6
#1 0x00000030dd10f8d5 in make_request () from /lib64/libc.so.6
#2 0x00000030dd10fd0a in __check_pf () from /lib64/libc.so.6
#3 0x00000030dd0d2ec7 in getaddrinfo () from /lib64/libc.so.6
#4 0x00007f46647e07bf in socket_getaddrinfo () from ...
我发现了一条消息here,并且知道它在查询 DNS 时被阻塞,我已经为请求设置了超时,但它没有用!有人遇到过这个问题吗?感谢您的帮助。
【问题讨论】:
标签: python python-requests blocking