# -*- 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)

最新文章

  1. Google之Chromium浏览器源码学习——base公共通用库(二)
  2. delphi 获取图片某一像素的颜色值
  3. VC++ TinyXML
  4. ofbiz进击 第四节。 我的form之旅
  5. IO流(文件字节输入输出
  6. @Autowired与@Resource的差别
  7. web 环境项目(intellj部署的tomcat) 重启时报 Exception in thread "HouseKeeper" java.lang.NullPointerException (转)
  8. (9)集合之Set,HashSet,TreeSet
  9. shiro(三),使用第三方jdbcRealm连接数据库操作
  10. Spring(五):Spring&Struts2&Hibernate整合后,实现查询Employee信息
  11. VC调用静态库、动态库
  12. Shiro-Spring 授权操作
  13. 页面跳转、URL直接访问限制
  14. Python股票分析系列——数据整理和绘制.p2
  15. 十二、存token获取token刷新token发送header头
  16. Codeforces Round #433 Div. 1
  17. Python replace() 和 re.sub() 字符串字符替换
  18. Atitit php vs node.js attilax总结
  19. kali蓝牙连接
  20. Hexo的搭建

热门文章

  1. vue生命周期钩子函数详解
  2. hibernate和mybatis出现配置文件xml的文件报错Multiple annotations found at this line(转)
  3. vue天气查询
  4. python的logging库
  5. requests使用小结(不定期更新)
  6. Python短文本自动识别个体是否有自杀倾向【新手必学】
  7. finalize()
  8. AngularJS Learning Notes
  9. python正则表达式中括号的作用,形如 "(\w+)\s+\w+"
  10. 【笔记6-支付及订单模块】从0开始 独立完成企业级Java电商网站开发(服务端)