python多线程下载器_06-python进阶-多线程下载器练手

我们需要用python 写一个多线程的下载器

我们要先获取这个文件的大小 然后将其分片 然后启动多线程 分别去下载 然后将其拼接起来

#!/usr/bin/env python

#coding:utf-8

import requests

from multiprocessing.dummy import Pool as ThreadPool

class my_download(object):

def __init__(self,URL):

self.url = URL

self.thread_num = 5

self.file_nume = URL.split('/')[-1]

url_headers = requests.head(self.url)

self.total = int(url_headers.headers['Content-Length'])

print self.total

#print type('total is %s' % (self.total))

def get_file_range(self):

ranges = []

download_num = int(self.total/self.thread_num)

print download_num

for i in range(self.thread_num):

if i == self.thread_num-1:

ranges.append((download_num*i,''))

else:

ranges.append((download_num*i,download_num*(i+1)))

return ranges

def download_file(self,val):

f = open(self.file_nume, 'w')

r = requests.get(self.url, headers={'Range': 'Bytes=%s-%s' % val, 'Accept-Encoding': '*'})

f.seek(val[0])

f.write(r.content)

return f

def run(self):

file_list = self.get_file_range()

#print file_list

Pool = ThreadPool(4)

res = map(self.download_file,file_list)

for i in res:

i.close()

Pool.close()

Pool.join()

url = "https://img3.doubanio.com/icon/up121443072-1.jpg"

downloader = my_download(url)

downloader.run()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值