urllib.request.urlretrieve()函数下载文件卡死解决办法
一.问题描述
urllib.request.urlretrieve()函数主要用途是下载网络上的文件到本地。
在实际使用过程中,经常会出现卡死的问题,而函数不支持设置超时。下面介绍几种解决办法。
二.解决方法
- 使用requests库代替
#原函数
urlretrieve(url, filename)
#替换
##请求资源
r = requests.get(img_url)
##打开文件并写入
with open(filename,'wb') as f:
f.write(r.content)
- 使用socket模块
import socket
from urllib.request import urlretrieve
#设置超时时间
socket.setdefaulttimeout(10)
try:
urlretrieve(url,filename)
#如果超时
except socket.timeout:
count = 1
while count <= 5:
try:
urlretrieve(url,filename)
break
except socket.timeout:
err_info = 'Reloading for %d time'%count if count == 1 else 'Reloading for %d times'%count
print(err_info)
count += 1
if count > 5:
print("download job failed!")
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。