同时下载多个文件,同时展示多个文件的下载进度
1、需求
2、两种方案对比
2.1、多线程 + GET + tqdm进度条
import requests,os
import threading
import random
import time
from tqdm import tqdm
from concurrent.futures import ThreadPoolExecutor, Future, as_completed, wait
from multiprocessing import cpu_counturls= ["https://bigota.d.miui.com/9.8.29/miui_MI5SPlus_9.8.29_339fb2abdc_8.0.zip","https://bigota.d.miui.com/V12.0.2.0.PDCCNXM/miui_MI6X_V12.0.2.0.PDCCNXM_7c0078f6ae_9.0.zip","https://download.pro.sony/21/03/aPaWpHqoiM/sony_pjupdate_2015_5003_pjs_auth.zip"
]def download_file(url):print("------", "Start download with urllib")name = url.split("/")[-1]resp = requests.get(url, stream=True)content_size = int(resp.headers['Content-Length']) / 1024 # 确定整个安装包的大小path = os.path.join(os.getcwd(), name)print("File path:%s, content_size:%s" %(path, content_size))with open(path, "wb") as file:print("\rFile %s, total size is: %s" % (name, content_size))for data in tqdm(iterable=resp.iter_content(1024), total=content_size, unit='k', desc=name):file.write(data)print("%s download ok" % name)def test_tqdm():executor = ThreadPoolExecutor(max_workers=cpu_count()) # 线程池设置,最多同时跑8个线程for url in urls:args = [url,]tasks = [executor.submit(lambda p:download_file(*p), args)]wait(tasks)test_tqdm()
展现形式:
2.2、多线程 + urlretrieve + 普通进度条
import requests,os
import threading
import random
import time
from tqdm import tqdm
from concurrent.futures import ThreadPoolExecutor, Future, as_completed, wait
from multiprocessing import cpu_count
from urllib import requesturls= ["https://bigota.d.miui.com/9.8.29/miui_MI5SPlus_9.8.29_339fb2abdc_8.0.zip","https://bigota.d.miui.com/V12.0.2.0.PDCCNXM/miui_MI6X_V12.0.2.0.PDCCNXM_7c0078f6ae_9.0.zip","https://download.pro.sony/21/03/aPaWpHqoiM/sony_pjupdate_2015_5003_pjs_auth.zip"
]def cbk(a, b, c):"""func:回调函数params:a:已经下载的数据块b:数据块的大小c:远程文件的大小"""start = time.perf_counter()per = 100.0*a*b/cif per>100:per=100dur = time.perf_counter() - startprint('\r'+'[下载进度]:%s%.2f%%[%.2fs]' % ('>'*int(a*b*50/c), float(per), dur), end='')if per == 100: # 解决end=''引发的不换行print()def download(url):file_name = url.split("/")[-1]request.urlretrieve(url, file_name, cbk)def test_urlretrieve():executor = ThreadPoolExecutor(max_workers=cpu_count()) # 线程池设置,最多同时跑8个线程for url in urls:args = [url,]tasks = [executor.submit(lambda p:download(*p), args)]wait(tasks)test_urlretrieve()
同时下载多个文件,同时展示多个文件的下载进度相关推荐
- springboot文件上传下载实战 —— 登录功能、展示所有文件
springboot文件上传下载实战 创建项目 pom.xml 数据库建表与环境准备 建表SQL 配置文件 application.properties 整体架构 前端页面 登录页面 login.ht ...
- [转]文件传输协议(FTP)操作(上传,下载,新建,删除,FTP间传送文件等)实现汇总1
转自:http://blog.csdn.net/soarheaven/archive/2008/12/08/3474152.aspx 最近项目需要对FTP服务器进行操作,现把实现总结如下: 打算分2篇 ...
- 【Flutter】Icons 组件 ( FlutterIcon 下载图标 | 自定义 svg 图标生成 ttf 字体文件 | 使用下载的 ttf 图标文件 )
文章目录 一.FlutterIcon 下载图标 二.自定义 svg 图标生成 ttf 字体文件 三.使用下载的 ttf 图标文件 四.完整代码示例 五.相关资源 一.FlutterIcon 下载图标 ...
- servlet实现文件上传,预览,下载和删除
一.准备工作 1.1 文件上传插件:uploadify: 1.2 文件上传所需jar包:commons-fileupload-1.3.1.jar和commons-io-2.2.jar 1.3 将数据转 ...
- java 上传文件及预览_SpringBoot上传下载文件及在线预览
SpringBoot上传下载文件及在线预览 今天大概就说说如何使用SpringBoot进行上传和下载以及在线预览文件 本篇主要介绍上传下载的功能,对于界面就简单一点,大致如下: 一.老规矩还是先看看小 ...
- php将图片导入,php中图片文件的导入,上传与下载
---------------------------------------------图片的导入-------------------------------------------------- ...
- Microsoft .NET Framework 2.0对文件传输协议(FTP)操作(上传,下载,新建,删除,FTP间传送文件等)实现汇总1...
相关文章导航 Sql Server2005 Transact-SQL 新兵器学习总结之-总结 Flex,Fms3相关文章索引 FlexAir开源版-全球免费多人视频聊天室,免费网络远程多人视频会议系统 ...
- java中Excel导入,下载模板,附带前端展示
java中Excel导入,下载模板,附带前端展示 后台下载模板代码 /*** 多个模板下载*/@RequestMapping(value = "/downloadExcel", m ...
- echarts实现河南各省市区县地图(河南省各省市区县地图json文件可以在我博客里下载)
前言:最近公司项目有个需求,展示河南省各省市区县的地图,并展示相应的数据,看了些资料决定用echarts实现. 一.完成之后的效果图 点击市的模块显示对应的市,并显示对应市的数据 点击区县的模块显示对 ...
- 移动端利用OpenGL展示3D模型文件STL
移动端利用OpenGL展示3D模型文件STL 突然发现上次写博客都是一年前了,没养成分享的习惯挺郁闷的,所以分享下个人感觉好玩的东西吧.纯理工科生笔杆子不硬,写的不好,哪里有看不懂的或者写的不好的希望 ...
最新文章
- 如何高效读论文?剑桥CS教授亲授“三遍论”:论文最多读三遍,有的放矢,步步深入...
- [翻译]pytest测试框架(二):使用
- .Net DES加密解密(不带向量)
- 红旗linux怎么更新,红旗linux7.0下自动更新firefox
- 【算法视频】字符串模式匹配--布鲁特.福斯算法
- Flink Exactly-Once 投递实现浅析 一致性
- 程序员如何高性能排序多个文件?
- android是j2me的一个实现吗,j2me与android的区别
- python 勒索病毒_lucky 勒索病毒分析与文件解密
- 如何将PPT中的图片无改变矢量图插入word中以及matlab矢量图插入word方法【每天一个小技巧】
- 马尔科夫matlab程序,马尔科夫链matlab代码
- TCP网络错误Connection reset by peer,peer是啥意思呢
- python输入包含20个数的列表_学习笔记20:Python基础使用(参数,嵌套,列表,元组,字典,字符串等)...
- 房子装修选择自装,物业办装修手续,需要哪些资料?
- 鲲鹏聚数,华为宣布联合高校发起GaussDB金种子发展计划
- 消防设施操作员考试真题、模拟练习题库(6)
- TCP/IP网络编程:P1->理解网络编程和套接字
- Miniconda软件安装教程(Windows)
- 计算机怎样将多行文字转换成表格,用WPS文本表格转换快速合并多行文字
- 2015年 android 白皮书