import requests
import threading
class downloader:
def __init__(self):
self.url=\'http://51reboot.com/src/blogimg/pc.jpg\'
self.num=8
self.name=self.url.split(\'/\')[-1]
r = requests.head(self.url)
self.total = int(r.headers[\'Content-Length\'])
print \'total is %s\' % (self.total)
def get_range(self):
ranges=[]
offset = int(self.total/self.num)
for i in range(self.num):
if i==self.num-1:
ranges.append((i*offset,\'\'))
else:
ranges.append((i*offset,(i+1)*offset))
return ranges
def download(self,start,end):
headers={\'Range\':\'Bytes=%s-%s\' % (start,end),\'Accept-Encoding\':\'*\'}
res = requests.get(self.url,headers=headers)
self.fd.seek(start)
self.fd.write(res.content)
def run(self):
self.fd = open(self.name,\'w\')
thread_list = []
n = 0
for ran in self.get_range():
start,end = ran
print \'thread %d start:%s,end:%s\'%(n,start,end)
n+=1
thread = threading.Thread(target=self.download,args=(start,end))
thread.start()
thread_list.append(thread)
for i in thread_list:
i.join()
print \'download %s load success\'%(self.name)
self.fd.close()
if __name__==\'__main__\':
down = downloader()
down.run()