我正在尝试使用python下载一批文件,我使用请求模块打开流,换句话说,我检索200K块中的每个文件。 但是,有时,下载可能会停止,因为它只是卡住(没有响应)并且没有错误。我想这是因为我的电脑和服务器之间的连接不够稳定。这是我的问题,如何检查这种停止并建立新连接?
答案 0 :(得分:2)
你可能不希望从外部检测到这种情况,当你可以使用timeouts让requests
失败而不是停止服务器停止发送字节时。
由于您没有向我们展示您的代码,因此很难向您展示如何更改代码......但我将向您展示如何更改其他代码:
# hanging
text = requests.get(url).text
# not hanging
try:
text = requests.get(url, timeout=10.0).text
except requests.exceptions.Timeout:
# failed, do something else
# trying until success
while True:
try:
text = requests.get(url, timeout=10.0).text
break
except requests.exceptions.Timeout:
pass
如果您做想要出于某种原因从外部检测到它,您需要使用multiprocessing
或类似内容将requests
驱动的代码移动到孩子身上处理。理想情况下,您希望它在某些Queue
上发布更新,或者每200KB设置并通知一些Condition
- 受保护的共享标志变量,然后主进程可以阻止Queue
或{{ 1}}和Condition
子进程如果超时。例如(伪代码):
kill