电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

Python實現多線程下載腳本的示例代碼

瀏覽:119日期:2022-07-31 09:04:40

0x01 分析

一個簡單的多線程下載資源的Python腳本,主要實現部分包含兩個類:

Download類:包含download()和get_complete_rate()兩種方法。

download()方法種首先用 urlopen() 方法打開遠程資源并通過 Content-Length獲取資源的大小,然后計算每個線程應該下載網絡資源的大小及對應部分嗎,最后依次創建并啟動多個線程來下載網絡資源的指定部分。 get_complete_rate()則是用來返回已下載的部分占全部資源大小的比例,用來回顯進度。

ThreadDownload類:該線程類繼承了threading.Thread類,包含了一個run()方法。

run()方法主要負責每個線程讀取網絡數據并寫入本地。

0x02 代碼

# 文件名:ThreadDownload.pyimport threadingfrom urllib.request import *class Download: def __init__(self, link, file_path, thread_num): # 下載路徑 self.link = link # 保存位置 self.file_path = file_path # 使用多少線程 self.thread_num = thread_num # 初始化threads數組 self.threads = [] def download(self): req = Request(url=self.link, method=’GET’) req.add_header(’Accept’, ’*/*’) req.add_header(’Charset’, ’UTF-8’) req.add_header(’Connection’, ’Keep-Alive’) f = urlopen(req) # 獲取要下載的文件的大小 self.file_size = int(dict(f.headers).get(’Content-Length’, 0)) f.close() # 計算每個線程要下載的資源的大小 current_part_size = self.file_size // self.thread_num + 1 for i in range(self.thread_num): # 計算每個線程下載的開始位置 start_pos = i * current_part_size # 每個線程使用一個wb模式打開的文件進行下載 t = open(self.file_path, ’wb’) t.seek(start_pos, 0) # 創建下載線程 td = ThreadDownload(self.link, start_pos, current_part_size, t) self.threads.append(td) td.start() # 獲下載的完成百分比 def get_complete_rate(self): sum_size = 0 for i in range(self.thread_num): sum_size += self.threads[i].length return sum_size / self.file_sizeclass ThreadDownload(threading.Thread): def __init__(self, link, start_pos, current_part_size, current_part): super().__init__() # 下載路徑 self.link = link # 當前線程的下載位置 self.start_pos = start_pos # 定義當前線程負責下載的文件大小 self.current_part_size = current_part_size # 當前文件需要下載的文件快 self.current_part = current_part # 定義該線程已經下載的字節數 self.length = 0 def run(self): req = Request(url = self.link, method=’GET’) req.add_header(’Accept’, ’*/*’) req.add_header(’Charset’, ’UTF-8’) req.add_header(’Connection’, ’Keep-Alive’) f = urlopen(req) # 跳過self.start_pos個字節,表明該線程只負責下載自己負責的那部分內容 for i in range(self.start_pos): f.read(1) # 讀取網絡數據,并寫入本地 while self.length < self.current_part_size: data = f.read(1024) if data is None or len(data) <= 0:break self.current_part.write(data) # 累計該線程下載的總大小 self.length += len(data) self.current_part.close() f.close()

#!/usr/bin/env python # -*- coding: utf-8 -*- # 文件名:thread_download-master.pyimport sysimport timefrom ThreadDownload import *def show_process(dl): while dl.get_complete_rate() < 1: complete_rate = int(dl.get_complete_rate()*100) print(’r’ + ’下載中···(已下載’ + str(complete_rate) + ’%)’, end=’’, flush=True) time.sleep(0.01)def main(): try: Link = input(’[+]’ + ’Link: ’) file_path = input(’[+]’ + ’File Path: ’) thread_number = input(’[+]’ + ’Thread Number: ’) thread_number = int(thread_number) dl = Download(Link, file_path, thread_number) dl.download() print(’n開始下載!’) show_process(dl) print(’r’ + ’下載中···(已下載’ + ’100%)’, end=’’, flush=True) print(’n下載完成!’) except Exception: print(’Parameter Setting Error’) sys.exit(1)if __name__==’__main__’: main()

0x03 運行結果

下載歌曲《男孩》為例,下載到./Download/目錄下并命名為男孩.mp3,設置5個線程:

Python實現多線程下載腳本的示例代碼

Python實現多線程下載腳本的示例代碼

下載成功:

Python實現多線程下載腳本的示例代碼

到此這篇關于Python實現多線程下載腳本的示例代碼的文章就介紹到這了,更多相關Python 多線程下載腳本內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 法兰连接型电磁流量计-蒸汽孔板节流装置流量计-北京凯安达仪器仪表有限公司 | 防水接头-电缆防水接头-金属-电缆密封接头-不锈钢电缆接头 | 贝壳粉涂料-内墙腻子-外墙腻子-山东巨野七彩贝壳漆业中心 | 偏心半球阀-电动偏心半球阀-调流调压阀-旋球阀-上欧阀门有限公司 | wika威卡压力表-wika压力变送器-德国wika代理-威卡总代-北京博朗宁科技 | 菏泽商标注册_菏泽版权登记_商标申请代理_菏泽商标注册去哪里 | 龙门加工中心-数控龙门加工中心厂家价格-山东海特数控机床有限公司_龙门加工中心-数控龙门加工中心厂家价格-山东海特数控机床有限公司 | 成都治疗尖锐湿疣比较好的医院-成都治疗尖锐湿疣那家医院好-成都西南皮肤病医院 | 灰板纸、灰底白、硬纸板等纸品生产商-金泊纸业 | 药品仓库用除湿机-变电站用防爆空调-油漆房用防爆空调-杭州特奥环保科技有限公司 | 活性氧化铝|无烟煤滤料|活性氧化铝厂家|锰砂滤料厂家-河南新泰净水材料有限公司 | 砂石生产线_石料生产线设备_制砂生产线设备价格_生产厂家-河南中誉鼎力智能装备有限公司 | 喷涂流水线,涂装流水线,喷漆流水线-山东天意设备科技有限公司 | 小型高低温循环试验箱-可程式高低温湿热交变试验箱-东莞市拓德环境测试设备有限公司 | 深圳高新投三江工业消防解决方案提供厂家_服务商_园区智慧消防_储能消防解决方案服务商_高新投三江 | 深圳活动策划公司|庆典策划|专业公关活动策划|深圳艺典文化传媒 重庆中专|职高|技校招生-重庆中专招生网 | 淬火设备-钎焊机-熔炼炉-中频炉-锻造炉-感应加热电源-退火机-热处理设备-优造节能 | 河南彩印编织袋,郑州饲料编织袋定制,肥料编织袋加工厂-盛军塑业 河南凯邦机械制造有限公司 | 酸度计_PH计_特斯拉计-西安云仪 纯水电导率测定仪-万用气体检测仪-低钠测定仪-米沃奇科技(北京)有限公司www.milwaukeeinst.cn | 二手Sciex液质联用仪-岛津气质联用仪-二手安捷伦气质联用仪-上海隐智科学仪器有限公司 | 深圳美安可自动化设备有限公司,喷码机,定制喷码机,二维码喷码机,深圳喷码机,纸箱喷码机,东莞喷码机 UV喷码机,日期喷码机,鸡蛋喷码机,管芯喷码机,管内壁喷码机,喷码机厂家 | EDLC超级法拉电容器_LIC锂离子超级电容_超级电容模组_软包单体电容电池_轴向薄膜电力电容器_深圳佳名兴电容有限公司_JMX专注中高端品牌电容生产厂家 | 塑料撕碎机_编织袋撕碎机_废纸撕碎机_生活垃圾撕碎机_废铁破碎机_河南鑫世昌机械制造有限公司 | 浙江华锤电器有限公司_地磅称重设备_防作弊地磅_浙江地磅售后维修_无人值守扫码过磅系统_浙江源头地磅厂家_浙江工厂直营地磅 | 两头忙,井下装载机,伸缩臂装载机,30装载机/铲车,50装载机/铲车厂家_价格-莱州巨浪机械有限公司 | 太原装修公司_山西整装家装设计_太原室内装潢软装_肖邦家居 | 液压油缸-液压站生产厂家-洛阳泰诺液压科技有限公司 | 氮化镓芯片-碳化硅二极管 - 华燊泰半导体 | 法钢特种钢材(上海)有限公司 - 耐磨钢板、高强度钢板销售加工 阀门智能定位器_电液动执行器_气动执行机构-赫尔法流体技术(北京)有限公司 | 南京试剂|化学试剂|分析试剂|实验试剂|cas号查询-专业60年试剂销售企业 | 帽子厂家_帽子工厂_帽子定做_义乌帽厂_帽厂_制帽厂_帽子厂_浙江高普制帽厂 | 天津暖气片厂家_钢制散热器_天津铜铝复合暖气片_维尼罗散热器 | PSI渗透压仪,TPS酸度计,美国CHAI PCR仪,渗透压仪厂家_价格,微生物快速检测仪-华泰和合(北京)商贸有限公司 | 无锡网站建设_企业网站定制-网站制作公司-阿凡达网络 | 东莞工作服_东莞工作服定制_工衣订做_东莞厂服 | 高速龙门架厂家_监控杆_多功能灯杆_信号灯杆_锂电池太阳能路灯-鑫世源照明 | 专业的压球机生产线及解决方案厂家-河南腾达机械厂 | 智慧物联网行业一站式解决方案提供商-北京东成基业 | 短信营销平台_短信群发平台_106短信发送平台-河南路尚 | 越南专线物流_东莞国际物流_东南亚专线物流_行通物流 | 卧涛科技有限公司科技项目申报公司|高新技术企业申报|专利申请 |