python多线程下载ts文件
2024-09-03 05:00:06
# -*- coding: utf-8 -*-
"""
Created on Wed Aug 22 15:56:19 2018 @author: Administrator
""" # 在python3下测试
import requests
import threading
import datetime count =0;
def Handler(start, end, url, filename): #headers = {'Range': 'bytes=%d-%d' % (start, end-1)}
#r = requests.get(url, headers=headers, stream=True)
for i in filename[start:end]:
global count
r = requests.get("https://youku.cdn2-youku.com/20180701/12972_72ec5f94/1000k/hls/"+i.replace("\n",""),stream=True)
#r = requests.get(url)
with open("ts/"+i.replace("\n",""), "wb") as code:
code.write(r.content)
count =count+1
print("下载进度:%.2f" % (count/len(filename))) def download_file(url, num_thread = 100):
f = open('index.m3u8', 'r', encoding='utf-8')
text_list = f.readlines()
s_list = []
for i in text_list:
if i.find('#EX')==-1:
s_list.append(i) f.close()
file_size = len(s_list) # 启动多线程写文件
part = file_size // num_thread # 如果不能整除,最后一块应该多几个字节
for i in range(num_thread):
start = part * i
if i == num_thread - 1: # 最后一块
end = file_size
else:
end = start + part t = threading.Thread(target=Handler, kwargs={'start': start, 'end': end, 'url': url, 'filename': s_list})
t.setDaemon(True)
t.start() # 等待所有线程下载完成
main_thread = threading.current_thread()
for t in threading.enumerate():
if t is main_thread:
continue
t.join()
#print('%s 下载完成' % file_name) if __name__ == '__main__':
url ="https://youku.cdn2-youku.com/20180701/12972_72ec5f94/1000k/hls/";
start = datetime.datetime.now().replace(microsecond=0)
download_file(url)
end = datetime.datetime.now().replace(microsecond=0)
print("用时: ", end='')
print(end-start)
最新文章
- Google之Chromium浏览器源码学习——base公共通用库(二)
- delphi 获取图片某一像素的颜色值
- VC++ TinyXML
- ofbiz进击 第四节。 我的form之旅
- IO流(文件字节输入输出
- @Autowired与@Resource的差别
- web 环境项目(intellj部署的tomcat) 重启时报 Exception in thread ";HouseKeeper"; java.lang.NullPointerException (转)
- (9)集合之Set,HashSet,TreeSet
- shiro(三),使用第三方jdbcRealm连接数据库操作
- Spring(五):Spring&;Struts2&;Hibernate整合后,实现查询Employee信息
- VC调用静态库、动态库
- Shiro-Spring 授权操作
- 页面跳转、URL直接访问限制
- Python股票分析系列——数据整理和绘制.p2
- 十二、存token获取token刷新token发送header头
- Codeforces Round #433 Div. 1
- Python replace() 和 re.sub() 字符串字符替换
- Atitit php vs node.js attilax总结
- kali蓝牙连接
- Hexo的搭建
热门文章
- vue生命周期钩子函数详解
- hibernate和mybatis出现配置文件xml的文件报错Multiple annotations found at this line(转)
- vue天气查询
- python的logging库
- requests使用小结(不定期更新)
- Python短文本自动识别个体是否有自杀倾向【新手必学】
- finalize()
- AngularJS Learning Notes
- python正则表达式中括号的作用,形如 ";(\w+)\s+\w+";
- 【笔记6-支付及订单模块】从0开始 独立完成企业级Java电商网站开发(服务端)