python 多線程將大文件分開下載后在合并的實(shí)例
更新時(shí)間:2018年11月09日 09:21:28 作者:聽雪聲的春天
今天小編就為大家分享一篇python 多線程將大文件分開下載后在合并的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
廢話不多說了,上代碼吧:
import threading
import requests
import time
import os
class Mythread(threading.Thread):
def __init__(self,url,startpos,endpos,f):
super(Mythread,self).__init__()
self.url=url
self.startpos=startpos
self.endpos=endpos
self.fd=f
def download(self):
print('start thread:%s at %s'%(self.getName(),time.time()))
headers={'Range':'bytes=%s-%s'%(self.startpos,self.endpos)}
res=requests.get(self.url,headers=headers)
self.fd.seek(self.startpos)
self.fd.write(res.content)
print('Stop thread:%s at%s'%(self.getName(),time.time()))
self.fd.close()
def run(self):
self.download()
if __name__=="__main__":
url='http://www.wendangxiazai.com/word/b-cfbdc77931b765ce050814a9-1.doc'
filename=url.split('/')[-1]
filesize=int(requests.head(url).headers['Content-Length'])
print('%s filesize:%s'%(filename,filesize))
threadnum=3
threading.BoundedSemaphore(threadnum)#允許線程個(gè)數(shù)
step=filesize//threadnum
mtd_list=[]
start=0
end=-1
tempf = open('E:\Python\py\web'+filename,'w')
tempf.close()
mtd_list=[]
with open('E:\Python\py\web'+filename,'rb+')as f:
#獲得文件句柄
fileno=f.fileno()#返回一個(gè)整型的文件描述符,可用于底層操作系統(tǒng)的 I/O 操作
while end<filesize-1:
start=end+1
end=start+step-1
if end>filesize:
end=filesize
print ('Start:%s,end:%s'%(start,end))
dup=os.dup(fileno)#復(fù)制文件句柄
fd=os.fdopen(dup,'rb+',-1)
t=Mythread(url,start,end,fd)
t.start()
mtd_list.append(t)
for i in mtd_list:
i.join()
f.close()
以上這篇python 多線程將大文件分開下載后在合并的實(shí)例就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
python編譯環(huán)境配置的實(shí)現(xiàn)步驟
本文主要介紹了python編譯環(huán)境配置的實(shí)現(xiàn)步驟,文中通過圖文示例介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-05-05
Python OpenCV實(shí)現(xiàn)裁剪并保存圖片
這篇文章主要為大家詳細(xì)介紹了Python OpenCV實(shí)現(xiàn)裁剪并保存圖片,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-07-07
python和node.js生成當(dāng)前時(shí)間戳的示例
這篇文章主要介紹了python和node.js生成當(dāng)前時(shí)間戳的示例,幫助大家更好的理解和學(xué)習(xí)python與node.js,感興趣的朋友可以了解下2020-09-09
Jmeter調(diào)用Python腳本實(shí)現(xiàn)參數(shù)互相傳遞的實(shí)現(xiàn)
這篇文章主要介紹了Jmeter調(diào)用Python腳本實(shí)現(xiàn)參數(shù)互相傳遞的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01
Python定時(shí)任務(wù)框架APScheduler安裝使用詳解
這篇文章主要介紹了Python定時(shí)任務(wù)框架APScheduler安裝使用詳解,重點(diǎn)介紹如何使用APscheduler實(shí)現(xiàn)python定時(shí)任務(wù),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)Python定時(shí)任務(wù)APScheduler相關(guān)知識(shí)感興趣的朋友一起看看吧2022-05-05
使用Matplotlib繪制平行坐標(biāo)系的示例詳解
平行坐標(biāo)系,是一種含有多個(gè)垂直平行坐標(biāo)軸的統(tǒng)計(jì)圖表,這篇文章主要為大家介紹了如何使用繪制平行坐標(biāo)系,需要的小伙伴可以參考一下2023-07-07

