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("\n",""),stream=True)
22         #r = requests.get(url) 
23         with open("ts/"+i.replace("\n",""), "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)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM