zoukankan      html  css  js  c++  java
  • 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()
  • 相关阅读:
    一、vue常用指令
    win10安装和配置node
    win10安装和配置java8
    二、vue-cli4.5脚手架创建vue项目
    配置分布式事务实例:springcloud-Hoxton.SR1+springboot2.2.2+nacos1.3.2+seata1.2.0
    centos7安装frps_0.31.1
    centos7安装nginx1.18.0
    docker安装nexus3
    centos7防火墙的配置
    centos7使用Apache实现HTTP访问SVN资源库
  • 原文地址:https://www.cnblogs.com/nerdlerss/p/7250802.html
Copyright © 2011-2022 走看看