版权声明:风火编程, 欢迎指正. https://blog.csdn.net/weixin_42620314/article/details/83793636
多线程下载文件
出现异常的线程会自动重新下载, 所有的进度会在同一位置轮换显示
import os
import datetime
from urllib import request
url_list = ["url1","url2","url3","url4"]
base_path = "/download/"
def download(url):
print("start:", url, datetime.now())
file_name = url + '.txt'
path = os.path.join(base_path, file_name)
try:
request.urlretrieve(url, path, callback)
except:
download(url)
def callback(a, b, c):
per = 100.0 * a * b / c
# print(a, b, c)
if per > 100:
per = 100
print('\r%.2f%%, %d' % (per, c), end=" ")
if __name__ == '__main__':
print("name_list", len(url_list))
thread_list = []
for i in url_list:
if url_list:
url = url_list.pop(0)
my_thread = Thread(target=download, args=(url,))
thread_list.append(my_thread)
for my_thread in thread_list:
my_thread.start()
for my_thread in thread_list:
my_thread.join()