我有以下代码在循环中下载文件,
import wget
try:
wget.download(url)
except:
pass
但如果互联网出现故障,它就不会返回! 所以我的整个循环都被卡住了。
如果互联网出现故障,我想重复相同的下载。所以我想知道是否会发生任何错误。
我该如何缓解这种情况?
答案 0 :(得分:1)
一个简单的解决方案是将下载代码移动到一个线程,并使其成为可以中断的单独进程。
您可以使用python Thread和Timer模块来实现它。
from threading import Thread, Timer
from functools import partial
import time
import urllib
def check_connectivity(t):
try:
urllib.request.urlopen("http://google.com", timeout=2)
except Exception as e:
t._Thread__stop()
class Download(Thread):
def run(self):
print("Trying to download file....")
con = partial(check_connectivity, self)
while True:
t = Timer(5, con) # Checks the connectivity every 5 second or less.
t.start()
# your download code....
def main():
down = Download()
down.start()
down.join()
您可以在线程的run方法中移动主下载循环。并启动一个监听网络连接的计时器。