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实现多线程下载相关推荐

  1. python壁纸数据抓取_python爬虫多线程实战:爬取美桌1080p壁纸图片

    本人纯手工码字哦,请耐心看完,有信心可以带你完整学会这个实战案例 一.需求分析: 1.下载 http://www.win4000.com/wallpaper.html 下指定分类 指定尺寸 的图片 2 ...

  2. python多线程读取数据库数据_Python基于多线程操作数据库相关知识点详解

    Python基于多线程操作数据库相关问题分析 本文实例分析了Python多线程操作数据库相关问题.分享给大家供大家参考,具体如下: python多线程并发操作数据库,会存在链接数据库超时.数据库连接丢 ...

  3. python socket多线程 获取朋友列表_python socket多线程通讯实例分析(聊天室)

    本文实例讲述了python socket多线程通讯方法.分享给大家供大家参考,具体如下: #!/usr/bin/evn python """ 这是一个Socket+多进程 ...

  4. python 读取mysql大量数据处理_python使用多线程快速把大量mysql数据导入elasticsearch...

    使用python多线程,运行时自定义线程数,自动计算每个线程处理的数据量,连接mysql读取数据,处理成需要的字段入到elasticsearch. 运行效果图: 10个线程 运行会在这里实时刷新,方便 ...

  5. python多线程实现访问页面_Python实现多线程爬虫

    最近在写爬虫程序爬取亚马逊上的评论信息,因此也自学了很多爬虫相关的知识,其实网络上已经有很多基于Python的入门爬虫程序了,所以学习起来比较方便,唯独那个多线程爬虫一直都学的不是很明白,所以就写下这 ...

  6. python多线程同步与互斥_Python之多线程:线程互斥与线程同步

    一.锁在多线程中的使用:线程互斥 lock = threading.Lock()#创建一个锁对象 1.with lock: pass 和进程使用的方式相同 2.控制线程结束的时间 通过一个全局变量 # ...

  7. python博客源码下载_Python生成并下载文件后端代码实例

    txt文件 生成并下载txt文件: @app.route('/download', methods=['GET']) def download(): content = "long text ...

  8. python3.7安装包下载_Python 3.7下载 Python 3.7 for win32 (Python编程开发工具)官方安装版 下载-脚本之家...

    Python 在国外的官网好多地方都打不开,所以找来供需要的朋友下载. Python是一种即译式的,互动的,面向对象的编程语言,它包含了模组式的操作,异常处理,动态资料形态,十分高层次的动态资料结构, ...

  9. python怎么去掉视频字幕_python实现去除下载电影和电视剧文件名中的多余字符的方法...

    本文实例讲述了python实现去除下载电影和电视剧文件名中的多余字符的方法,是一个非常实用的技巧,分享给大家供大家参考.具体如下: 有时候我们讨厌下载电影和电视剧文件名中的多余字符(如网址和广告字样) ...

  10. 苹果电脑python编程软件下载_Python Mac软件下载-Python for Mac(Python编程工具) v3.10.0免费版 - Mac天空...

    Python for Mac是一款免费的Python编程平台,由IDLE与Python Launcher两部分组成,可以在Mac系统上使用.作为当今最受欢迎和最受欢迎的编程语言之一,Python是一种 ...

最新文章

  1. 另辟蹊径,中科院自动化所等首次用图卷积网络解决语义分割难题
  2. Linux 信号可靠性,同步,异步,多线程信号等介绍
  3. Mule学习笔记(二)
  4. python记录程序运行时间的几种方法
  5. TCP UDP HTTP 的关系和区别
  6. 数论 —— 最大公约数与最小公倍数
  7. angular发布代码有缓存_如何在Angular应用程序中执行请求?
  8. python install_[Python] Linux下python install
  9. java基础总结06-常用api类-时间日期类
  10. datagrid---formatter方法
  11. vs2019安装包显示网络未链接_BBO最新5.19版下载及WBF世界网络赛指引
  12. 有哪些软件堪称「神器」,却不被大众所知?
  13. 关于电子计算机的热点,电脑如何变热点?8款电脑wifi热点软件推荐
  14. 杂谈——如何一分钟破解IDEA
  15. 鲁大师服务器cpu性能排行,鲁大师PC处理器性能排行:AMD撕裂者跑分碾压英特尔, i9 7980XE屈居第二!...
  16. 文章标题 execution(* cn.sxt.dao.impl.*.*(..))解释
  17. 有关window的history和location的使用
  18. RedHat开启telnet服务
  19. Linux笔记-ftp主动和被动模式下iptables的规则配置
  20. DirectDraw基础篇(学东西还是基础的好哦!)

热门文章

  1. 【路径规划】基于matlab A_star算法求解机器人栅格地图最短路径规划问题【含Matlab源码 1388期】
  2. 开通CSDN年度会员,免费赠送代码
  3. 【图像边缘检测】基于matlab GUI Sobel+Prewitt+Canny算子图像边缘检测(带面板)【含Matlab源码 1045期】
  4. 【图像压缩】基于matlab GUI FFT图像压缩【含Matlab源码 843期】
  5. 【数学建模】基于matlab计划生育政策调整对人口数量、结构及其影响的研究【含Matlab源码 749期】
  6. 【车间调度】基于matlab粒子群算法求解生产调度问题【含Matlab源码 412期】
  7. nas神经网络架构搜索_神经建筑搜索(NAS)基础
  8. 社会达尔文主义 盛行时间_新达尔文主义的心理理论
  9. 魔方与科学和计算机表现李世春,科学网—魔方 - 李世春的博文
  10. linux mk文件6,linux_2.6.30.4_Makefile_3--Makefile学习笔记