强制停止正在运行urlib下载的线程



我有一些线程正在使用Python的内置urlib模块下载各种网站的内容。代码看起来像这样:

from urllib.request import Request, urlopen
from threading import Thread
##do stuff
def download(url):
req = urlopen(Request(url))
return req.read()
url = "somerandomwebsite"
Thread(target=download, args=(url,)).start()
Thread(target=download, args=(url,)).start()
#Do more stuff

用户应该有一个停止加载数据的选项,虽然我可以在下载完成时使用标志/事件来阻止使用数据,但如果用户停止下载,我实际上无法停止下载本身。

有没有一种方法可以停止下载(最好在下载停止时做点什么(或强制(安全地(终止正在运行下载的线程?

提前谢谢。

您可以使用urllib.request.urlretrieve,而不是采用reporthook参数:

from urllib.request import urlretrieve
from threading import Thread
url = "someurl"
flag = 0
def dl_progress(count, blksize, filesize):
global flag
if flag:
raise Exception('downlaod canceled')
Thread(target=urlretrieve, args=(url, "test.rar",dl_progress)).start()
if cancel_download():
flag = 1

最新更新