• 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)
  • 相关阅读:
    python数据库小脚本
    替换debug
    监听属性变化
    ast binding
    还原未修改的常量
    数据库中常用查询
    职业生涯四个阶段
    如何控制需求
    如何将VS Code 切换成中文
    当同时使用bootstrapdatepicker.js和jquery.validate.js这两款插件,至少要选择两次时间,才能验证成功的问题
  • 原文地址:https://www.cnblogs.com/chenlove/p/9518612.html
Copyright © 2020-2023  润新知