python 다 중 스 레 드 는 큰 파일 을 분리 하여 다운로드 한 후 합 친 인 스 턴 스 입 니 다.
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)#
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()# , 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)#
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 다 중 스 레 드 는 큰 파일 을 분리 하여 다운로드 한 후에 합 친 인 스 턴 스 는 바로 작은 편집 이 여러분 에 게 공유 하 는 모든 내용 입 니 다.참고 하 시 기 를 바 랍 니 다.여러분 들 도 저 희 를 많이 사랑 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.