Python多线程:同时下载多个文件并显示进度条
发布时间:2023-12-04 22:12:27
在Python中,可以使用多线程来同时下载多个文件,并且可以通过使用进度条来显示下载进度。下面是一个使用多线程和进度条来下载多个文件的示例代码:
import requests
from threading import Thread
from tqdm import tqdm
# 定义要下载的文件列表
file_list = [
'https://example.com/file1.txt',
'https://example.com/file2.txt',
'https://example.com/file3.txt'
]
# 定义一个函数,用于下载文件,并显示下载进度条
def download_file(url):
# 获取文件名
file_name = url.split('/')[-1]
# 发送HTTP请求,下载文件
response = requests.get(url, stream=True)
# 获取文件大小
total_size = int(response.headers.get('content-length', 0))
# 初始化进度条
progress_bar = tqdm(total=total_size, unit='B', unit_scale=True)
# 以二进制的方式写入文件
with open(file_name, 'wb') as file:
for data in response.iter_content(chunk_size=4096):
# 更新进度条
progress_bar.update(len(data))
# 写入文件
file.write(data)
# 关闭进度条
progress_bar.close()
# 创建多个线程进行文件下载
threads = []
for file_url in file_list:
t = Thread(target=download_file, args=(file_url,))
threads.append(t)
t.start()
# 等待所有线程结束
for t in threads:
t.join()
print("All files downloaded.")
上述代码中,首先定义了一个文件列表file_list,包含了要下载的文件的URL地址。然后,使用download_file函数定义了下载文件的逻辑,其中使用了requests库发送HTTP请求,并使用chunk_size参数进行分块下载。我们通过在requests.get函数中添加stream=True参数来启用流式下载。使用tqdm库来创建进度条,并在下载过程中不断更新进度条。
在主线程中,我们创建了多个线程,每个线程都调用download_file函数来下载一个文件。通过调用thread.join()方法,主线程会等待所有的子线程执行完毕后再继续执行。
最后,程序输出"All files downloaded."表示所有文件下载完成。
通过这个例子,我们可以看到多线程和进度条的使用,可以同时下载多个文件并显示下载进度。这对于需要下载大量文件的任务来说,可以大大提高效率,并且提供了一个友好的界面来展示下载进度。
