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()
06-python进阶-多线程下载器练手的更多相关文章
- <基于Qt与POSIX线程>多线程下载器的简易搭建
原创博客,转载请联系博主! 本项目已托管到本人Git远程库:https://github.com/yue9944882/Snow 项目目标 Major Functionality 开发环境: Ce ...
- python进阶04 装饰器、描述器、常用内置装饰器
python进阶04 装饰器.描述器.常用内置装饰器 一.装饰器 作用:能够给现有的函数增加功能 如何给一个现有的函数增加执行计数的功能 首先用类来添加新功能 def fun(): #首先我们定义一个 ...
- Python进阶(六)----装饰器
Python进阶(六)----装饰器 一丶开放封闭原则 开放原则: 增加一些额外的新功能 封闭原则: 不改变源码.以及调用方式 二丶初识装饰器 装饰器: 也可称装饰器函数,诠释开放封闭原则 ...
- 【python】M3U8下载器脚本
[python]M3U8下载器脚本 脚本目标: 1. 输入M3U8文件的链接,得到视频 2.使用异步操作,这样可以快很多,不加锁,因为懒得写,而且影响不大 已知条件: 1.m3u8文件其实就是一个记录 ...
- python10min系列之多线程下载器
今天群里看到有人问关于python多线程写文件的问题,联想到这是reboot的架构师班的入学题,我想了一下,感觉坑和考察的点还挺多,可以当成一个面试题来问,简单说一下我的想法和思路吧,涉及的代码和注释 ...
- PYTHON文件多线程下载
其实,在一般的文件编程中,这有两个概念要说明: 第一是,下载一个大文件,将这个大文件多为多线程. 第二是,下载N多小文件,将每个线程指定下载多个小文件. 现在实现的是多线程下载一个大文件. 今天完成了 ...
- 适合Python 新手的5大练手项目,你练了么?
接下来就给大家介绍几种适合新手的练手项目. 0.算法系列-排序与查找 Python写swap很方便,就一句话(a, b = b, a),于是写基于比较的排序能短小精悍.刚上手一门新语言练算法最合适不过 ...
- Java多线程下载器FileDownloader(支持断点续传、代理等功能)
前言 在我的任务清单中,很早就有了一个文件下载器,但一直忙着没空去写.最近刚好放假,便抽了些时间完成了下文中的这个下载器. 介绍 同样的,还是先上效果图吧. Jar包地址位于 FileDownload ...
- python进阶--多线程多进程
一.线程和进程 进程是拥有独立内存,能够独立运行的最小单位,也是程序执行的最小单位,线程是程序运行过程中,一个单一的顺序控制流程,是程序执行流的最小单位,一个进程至少包含一个线程,多线程共享进程的内存 ...
随机推荐
- git remote add 用法
前一阵子,对于git remote add 的内容一直调错,现在明确一下: 这里是gitStack的用法:git remote add gitServerName http://ip/name(这里没 ...
- 初识Adapter
首先得了解Adapter层级关系: 示例,将user对象适配到textview public class User { private String userName; private String ...
- EasyUI:EasyUI-DataGrid多行合并实现
1.首先我们<table>增加一个属性data-options="onLoadSuccess:mergeCells",mergeCells是我们对应的JS方法名,意思就 ...
- Beginning Python Chapter 3 Notes
变量(variable)是储存数据的实体,在Python中也被称为"名称"(name). 1.Python"名称"基本命名法则 1.1) "名称&qu ...
- 【UML】类图Class diagram(转)
http://blog.csdn.net/sds15732622190/article/details/48860711 前言 说到UML,相信大家就能立刻反应出其中的类图,为什么这么说呢,类图和用例 ...
- JavaScript BOM DOM 对象
title: JavaScript BOM DOM 对象 tags: JavaScript --- browser object model document onject model BOM对象 w ...
- 免费手机号码归属地API查询接口
免费手机号码归属地API查询接口 一.淘宝网API API地址: http://tcc.taobao.com/cc/json/mobile_tel_segment.htm?tel=1585078144 ...
- java ArrayList remove 2 及正确方法
https://www.cnblogs.com/chrischennx/p/9610853.html 正确方式 方法一,还是fori,位置前挪了减回去就行了, remove后i--: public v ...
- JavaScript操作DOM
1.DOM对象简介: 什么是DOM:(Document Object Model) 译为文档对象模型,是 HTML 和 XML 文档的编程接口. 2.DOM HTML 节点树:指的是DOM中为操作 ...
- [BZOJ4327]:[JZOI2012]玄武密码(AC自动机)
题目传送门 题目描述: 在美丽的玄武湖畔,鸡鸣寺边,鸡笼山前,有一块富饶而秀美的土地,人们唤作进香河.相传一日,一缕紫气从天而至,只一瞬间便消失在了进香河中.老人们说,这是玄武神灵将天书藏匿在此. ...