python多线程实现同时下载_Python实现多线程下载
1.[代码][Python]代码
Python语言: Python实现多线程下载
#!/usr/bin/python
# -*- coding: utf-8 -*-
# filename: paxel.py
'''It is a multi-thread downloading tool
It was developed follow axel.
Author: volans
E-mail: volansw [at] gmail.com
'''
import sys
import os
import time
import urllib
from threading import Thread
local_proxies = {'http': 'http://131.139.58.200:8080'}
class AxelPython(Thread, urllib.FancyURLopener):
'''Multi-thread downloading class.
run() is a vitural method of Thread.
'''
def __init__(self, threadname, url, filename, ranges=0, proxies={}):
Thread.__init__(self, name=threadname)
urllib.FancyURLopener.__init__(self, proxies)
self.name = threadname
self.url = url
self.filename = filename
self.ranges = ranges
self.downloaded = 0
def run(self):
'''vertual function in Thread'''
try:
self.downloaded = os.path.getsize( self.filename )
except OSError:
#print 'never downloaded'
self.downloaded = 0
# rebuild start poind
self.startpoint = self.ranges[0] + self.downloaded
# This part is completed
if self.startpoint >= self.ranges[1]:
print 'Part %s has been downloaded over.' % self.filename
return
self.oneTimeSize = 16384 #16kByte/time
print 'task %s will download from %d to %d' % (self.name, self.startpoint, self.ranges[1])
self.addheader("Range", "bytes=%d-%d" % (self.startpoint, self.ranges[1]))
self.urlhandle = self.open( self.url )
data = self.urlhandle.read( self.oneTimeSize )
while data:
filehandle = open( self.filename, 'ab+' )
filehandle.write( data )
filehandle.close()
self.downloaded += len( data )
#print "%s" % (self.name)
#progress = u'\r...'
data = self.urlhandle.read( self.oneTimeSize )
def GetUrlFileSize(url, proxies={}):
urlHandler = urllib.urlopen( url, proxies=proxies )
headers = urlHandler.info().headers
length = 0
for header in headers:
if header.find('Length') != -1:
length = header.split(':')[-1].strip()
length = int(length)
return length
def SpliteBlocks(totalsize, blocknumber):
blocksize = totalsize/blocknumber
ranges = []
for i in range(0, blocknumber-1):
ranges.append((i*blocksize, i*blocksize +blocksize - 1))
ranges.append(( blocksize*(blocknumber-1), totalsize -1 ))
return ranges
def islive(tasks):
for task in tasks:
if task.isAlive():
return True
return False
def paxel(url, output, blocks=6, proxies=local_proxies):
''' paxel
'''
size = GetUrlFileSize( url, proxies )
ranges = SpliteBlocks( size, blocks )
threadname = [ "thread_%d" % i for i in range(0, blocks) ]
filename = [ "tmpfile_%d" % i for i in range(0, blocks) ]
tasks = []
for i in range(0,blocks):
task = AxelPython( threadname[i], url, filename[i], ranges[i] )
task.setDaemon( True )
task.start()
tasks.append( task )
time.sleep( 2 )
while islive(tasks):
downloaded = sum( [task.downloaded for task in tasks] )
process = downloaded/float(size)*100
show = u'\rFilesize:%d Downloaded:%d Completed:%.2f%%' % (size, downloaded, process)
sys.stdout.write(show)
sys.stdout.flush()
time.sleep( 0.5 )
filehandle = open( output, 'wb+' )
for i in filename:
f = open( i, 'rb' )
filehandle.write( f.read() )
f.close()
try:
os.remove(i)
pass
except:
pass
filehandle.close()
if __name__ == '__main__':
url = "http://www.pygtk.org/dist/pygtk2-tut.pdf"
output = 'pygtk2.pdf'
paxel( url, output, blocks=4, proxies={} )
python多线程实现同时下载_Python实现多线程下载相关推荐
- python壁纸数据抓取_python爬虫多线程实战:爬取美桌1080p壁纸图片
本人纯手工码字哦,请耐心看完,有信心可以带你完整学会这个实战案例 一.需求分析: 1.下载 http://www.win4000.com/wallpaper.html 下指定分类 指定尺寸 的图片 2 ...
- python多线程读取数据库数据_Python基于多线程操作数据库相关知识点详解
Python基于多线程操作数据库相关问题分析 本文实例分析了Python多线程操作数据库相关问题.分享给大家供大家参考,具体如下: python多线程并发操作数据库,会存在链接数据库超时.数据库连接丢 ...
- python socket多线程 获取朋友列表_python socket多线程通讯实例分析(聊天室)
本文实例讲述了python socket多线程通讯方法.分享给大家供大家参考,具体如下: #!/usr/bin/evn python """ 这是一个Socket+多进程 ...
- python 读取mysql大量数据处理_python使用多线程快速把大量mysql数据导入elasticsearch...
使用python多线程,运行时自定义线程数,自动计算每个线程处理的数据量,连接mysql读取数据,处理成需要的字段入到elasticsearch. 运行效果图: 10个线程 运行会在这里实时刷新,方便 ...
- python多线程实现访问页面_Python实现多线程爬虫
最近在写爬虫程序爬取亚马逊上的评论信息,因此也自学了很多爬虫相关的知识,其实网络上已经有很多基于Python的入门爬虫程序了,所以学习起来比较方便,唯独那个多线程爬虫一直都学的不是很明白,所以就写下这 ...
- python多线程同步与互斥_Python之多线程:线程互斥与线程同步
一.锁在多线程中的使用:线程互斥 lock = threading.Lock()#创建一个锁对象 1.with lock: pass 和进程使用的方式相同 2.控制线程结束的时间 通过一个全局变量 # ...
- python博客源码下载_Python生成并下载文件后端代码实例
txt文件 生成并下载txt文件: @app.route('/download', methods=['GET']) def download(): content = "long text ...
- python3.7安装包下载_Python 3.7下载 Python 3.7 for win32 (Python编程开发工具)官方安装版 下载-脚本之家...
Python 在国外的官网好多地方都打不开,所以找来供需要的朋友下载. Python是一种即译式的,互动的,面向对象的编程语言,它包含了模组式的操作,异常处理,动态资料形态,十分高层次的动态资料结构, ...
- python怎么去掉视频字幕_python实现去除下载电影和电视剧文件名中的多余字符的方法...
本文实例讲述了python实现去除下载电影和电视剧文件名中的多余字符的方法,是一个非常实用的技巧,分享给大家供大家参考.具体如下: 有时候我们讨厌下载电影和电视剧文件名中的多余字符(如网址和广告字样) ...
- 苹果电脑python编程软件下载_Python Mac软件下载-Python for Mac(Python编程工具) v3.10.0免费版 - Mac天空...
Python for Mac是一款免费的Python编程平台,由IDLE与Python Launcher两部分组成,可以在Mac系统上使用.作为当今最受欢迎和最受欢迎的编程语言之一,Python是一种 ...
最新文章
- 另辟蹊径,中科院自动化所等首次用图卷积网络解决语义分割难题
- Linux 信号可靠性,同步,异步,多线程信号等介绍
- Mule学习笔记(二)
- python记录程序运行时间的几种方法
- TCP UDP HTTP 的关系和区别
- 数论 —— 最大公约数与最小公倍数
- angular发布代码有缓存_如何在Angular应用程序中执行请求?
- python install_[Python] Linux下python install
- java基础总结06-常用api类-时间日期类
- datagrid---formatter方法
- vs2019安装包显示网络未链接_BBO最新5.19版下载及WBF世界网络赛指引
- 有哪些软件堪称「神器」,却不被大众所知?
- 关于电子计算机的热点,电脑如何变热点?8款电脑wifi热点软件推荐
- 杂谈——如何一分钟破解IDEA
- 鲁大师服务器cpu性能排行,鲁大师PC处理器性能排行:AMD撕裂者跑分碾压英特尔, i9 7980XE屈居第二!...
- 文章标题 execution(* cn.sxt.dao.impl.*.*(..))解释
- 有关window的history和location的使用
- RedHat开启telnet服务
- Linux笔记-ftp主动和被动模式下iptables的规则配置
- DirectDraw基础篇(学东西还是基础的好哦!)
热门文章
- 【路径规划】基于matlab A_star算法求解机器人栅格地图最短路径规划问题【含Matlab源码 1388期】
- 开通CSDN年度会员,免费赠送代码
- 【图像边缘检测】基于matlab GUI Sobel+Prewitt+Canny算子图像边缘检测(带面板)【含Matlab源码 1045期】
- 【图像压缩】基于matlab GUI FFT图像压缩【含Matlab源码 843期】
- 【数学建模】基于matlab计划生育政策调整对人口数量、结构及其影响的研究【含Matlab源码 749期】
- 【车间调度】基于matlab粒子群算法求解生产调度问题【含Matlab源码 412期】
- nas神经网络架构搜索_神经建筑搜索(NAS)基础
- 社会达尔文主义 盛行时间_新达尔文主义的心理理论
- 魔方与科学和计算机表现李世春,科学网—魔方 - 李世春的博文
- linux mk文件6,linux_2.6.30.4_Makefile_3--Makefile学习笔记