Python 为什么超时的请求调用会挂起?
我有一个程序,可以在几个线程中查询一系列API。对于其中两个API(我不控制),线程恰好冻结——可能是在HTTP请求上(我收到一个警报,告诉我调用已经有一段时间没有完成) 我最初认为这是一个问题,但我的代码处理了这一点,包括捕获异常:Python 为什么超时的请求调用会挂起?,python,python-3.x,python-requests,Python,Python 3.x,Python Requests,我有一个程序,可以在几个线程中查询一系列API。对于其中两个API(我不控制),线程恰好冻结——可能是在HTTP请求上(我收到一个警报,告诉我调用已经有一段时间没有完成) 我最初认为这是一个问题,但我的代码处理了这一点,包括捕获异常: while True: try: r = requests.get('http://10.10.10.1', timeout=10) if not r.ok: raise ValueError('w
while True:
try:
r = requests.get('http://10.10.10.1', timeout=10)
if not r.ok:
raise ValueError('wrong reply for API xxx: {t}, code: {c}'.format(t=r.text, c=r.status_code))
except Exception as e:
# cannot reach the API at all
log.error('problem with API xxx: {e}'.format(e=e))
else:
(...)
time.sleep(10)
记住这一点,
请求
调用挂起是否有原因?(请求
2.12.4,Python 3.4+)。(…)
下的代码部分由非常基本的非阻塞数据转换组成。是API请求的结果非常大还是连接速度非常慢?如果它实际接收到数据,它不会超时,并且在获得所有数据之前它也不会返回……”超时不是整个响应下载的时间限制;相反,如果服务器在超时秒内没有发出响应,则会引发异常(更准确地说,如果在超时秒的基础套接字上没有接收到字节)。如果没有明确指定超时,则请求不会超时。“您的请求
循环时钟是多少(哪个值是正常的(毫秒,美国)?)虽然为True
和timeout=10
但我无法想象如何将这两个功能结合起来?
。当然,您可以同时使用它们,但不能将它们放在同一个过程中。如果您认为这个过程很快,请使用插座。“请求”不是本地的解决方案@dsgdfg:对不起,我不明白你的意思。while
循环使调用永远重复,sleep
将线程挂起一段时间,而timeout
确保请求
调用在另一方(API)出现问题时退出。“while循环使调用永远重复”永远需要对称过程!外部进程总是需要一个线程和状态比较器函数(timeout
不为您做任何事情)。如何推送实时数据?超时<代码>r=请求。获取('http://10.10.10.1“,timeout=10)
完全是错误的想法,因为您只收到了请求,需要使用如果客户端已连接:server.push\u data()
,那么我们有相同的想法吗?不