zoukankan      html  css  js  c++  java
  • python多线程下载ts文件

     1 # -*- coding: utf-8 -*-
     2 """
     3 Created on Wed Aug 22 15:56:19 2018
     4 
     5 @author: Administrator
     6 """
     7 
     8 # 在python3下测试
     9 import requests
    10 import threading
    11 import datetime
    12 
    13  
    14 count =0;
    15 def Handler(start, end, url, filename):
    16     
    17     #headers = {'Range': 'bytes=%d-%d' % (start, end-1)}
    18     #r = requests.get(url, headers=headers, stream=True)
    19     for i in filename[start:end]:
    20         global count
    21         r = requests.get("https://youku.cdn2-youku.com/20180701/12972_72ec5f94/1000k/hls/"+i.replace("
    ",""),stream=True)
    22         #r = requests.get(url) 
    23         with open("ts/"+i.replace("
    ",""), "wb") as code:
    24              code.write(r.content)
    25         count =count+1
    26         print("下载进度:%.2f" % (count/len(filename)))
    27  
    28 def download_file(url, num_thread = 100):
    29     f = open('index.m3u8', 'r', encoding='utf-8')
    30     text_list = f.readlines()
    31     s_list = []
    32     for i in text_list:
    33         if i.find('#EX')==-1:
    34             s_list.append(i)
    35             
    36     f.close()
    37     file_size = len(s_list)
    38  
    39     # 启动多线程写文件
    40     part = file_size // num_thread  # 如果不能整除,最后一块应该多几个字节
    41     for i in range(num_thread):
    42         start = part * i
    43         if i == num_thread - 1:   # 最后一块
    44             end = file_size
    45         else:
    46             end = start + part
    47  
    48         t = threading.Thread(target=Handler, kwargs={'start': start, 'end': end, 'url': url, 'filename': s_list})
    49         t.setDaemon(True)
    50         t.start()
    51  
    52     # 等待所有线程下载完成
    53     main_thread = threading.current_thread()
    54     for t in threading.enumerate():
    55         if t is main_thread:
    56             continue
    57         t.join()
    58     #print('%s 下载完成' % file_name)
    59  
    60 if __name__ == '__main__':
    61     url ="https://youku.cdn2-youku.com/20180701/12972_72ec5f94/1000k/hls/";
    62     start = datetime.datetime.now().replace(microsecond=0)  
    63     download_file(url)
    64     end = datetime.datetime.now().replace(microsecond=0)
    65     print("用时: ", end='')
    66     print(end-start)
  • 相关阅读:
    命令拷屏之网络工具
    PHP 设计模式 笔记与总结(1)命名空间 与 类的自动载入
    Java实现 计蒜客 1251 仙岛求药
    Java实现 计蒜客 1251 仙岛求药
    Java实现 计蒜客 1251 仙岛求药
    Java实现 蓝桥杯 算法训练 字符串合并
    Java实现 蓝桥杯 算法训练 字符串合并
    Java实现 蓝桥杯 算法训练 字符串合并
    Java实现 LeetCode 143 重排链表
    Java实现 LeetCode 143 重排链表
  • 原文地址:https://www.cnblogs.com/chenlove/p/9518612.html
Copyright © 2011-2022 走看看