python基于queue和threading实现多线程下载实例


Posted in Python onOctober 08, 2014

本文实例讲述了python基于queue和threading实现多线程下载的方法,分享给大家供大家参考。具体方法如下:

主代码如下:

#download worker 
  queue_download = Queue.Queue(0) 
  DOWNLOAD_WORKERS = 20 
  for i in range(DOWNLOAD_WORKERS): 
    DownloadWorker(queue_download).start() #start a download worker 
     
  for md5 in MD5S: 
    queue_download.put(md5) 
  for i in range(DOWNLOAD_WORKERS): 
    queue_download.put(None)

其中downloadworkers.py
类继承 threading.Thread,重载run方法..在__init__中调用threading.Thread.__init__(self),
在run方法中实现耗时的操作

import threading 
import Queue 
import md5query 
import DOM 
import os,sys 

class DownloadWorker(threading.Thread): 
  """""" 
 

  def __init__(self, queue): 
    """Constructor""" 
    self.__queue = queue 
    threading.Thread.__init__(self) 
 
 
  def run(self): 
    while 1: 
      md5 = self.__queue.get() 
      if md5 is None: 
        break #reached end of queue 
      #this is a time-cost produce 
      self._down(md5) 
 
      print "task:", md5, "finished" 
 
  def _down(self, md5): 
    config = { 
      'input':sys.stdin,  
      'output':'./samples',  
      'location':'xxx',  
      'has-fn':False,  
      'options':{'connect.timeout':60, 'timeout':3600},  
      'log':file('logs.txt', 'w'),  
    } 
    print 'download %s...' % (md5) 
    try: 
      data = downloadproc(config['location'], config['options'])#我的下载过程 
      if data: 
        dom, fileData = md5query.splited(data) 
        filename = md5 
        if config['has-fn']: 
          filename = '%s_%s' % (md5, dom.nodeValue2('xxxxxxx', '').encode('utf-8'))#这是我的下载的方法 
        f = file(os.path.join(config['output'], filename), 'w') 
        f.write(fileData) 
        f.close() 
 
        print '%s\tok' % (md5) 
      else: 
        print>>config['log'], '%s\t%s' % (md5, 'failed') 
    except Exception, e: 
      print>>config['log'], '%s\t%s' % (md5, str(e))

希望本文所述对大家的Python程序设计有所帮助。

Python 相关文章推荐
python实现自动登录人人网并采集信息的方法
Jun 28 Python
Python使用smtplib模块发送电子邮件的流程详解
Jun 27 Python
python中numpy包使用教程之数组和相关操作详解
Jul 30 Python
使用Python 正则匹配两个特定字符之间的字符方法
Dec 24 Python
python简单验证码识别的实现方法
May 10 Python
使用Python画股票的K线图的方法步骤
Jun 28 Python
python数据处理之如何选取csv文件中某几行的数据
Sep 02 Python
python程序文件扩展名知识点详解
Feb 27 Python
python 函数嵌套及多函数共同运行知识点讲解
Mar 03 Python
python opencv把一张图片嵌入(叠加)到另一张图片上的实现代码
Jun 11 Python
基于python模拟bfs和dfs代码实例
Nov 19 Python
用Python selenium实现淘宝抢单机器人
Jun 18 Python
python实现封装得到virustotal扫描结果
Oct 05 #Python
python解析xml文件操作实例
Oct 05 #Python
python写xml文件的操作实例
Oct 05 #Python
python实现上传样本到virustotal并查询扫描信息的方法
Oct 05 #Python
python实现计算资源图标crc值的方法
Oct 05 #Python
python求crc32值的方法
Oct 05 #Python
Python获取文件ssdeep值的方法
Oct 05 #Python
You might like
基于jQuery选择器的整理集合
2013/04/26 Javascript
解析Javascript中中括号“[]”的多义性
2013/12/03 Javascript
javascript的tab切换原理与效果实现方法
2015/01/10 Javascript
javascript数组去重的六种方法汇总
2015/08/16 Javascript
jQuery 1.9.1源码分析系列(十三)之位置大小操作
2015/12/02 Javascript
使用plupload自定义参数实现多文件上传
2016/07/19 Javascript
AngularJS 模块详解及简单实例
2016/07/28 Javascript
将form表单通过ajax实现无刷新提交的简单实例
2016/10/12 Javascript
AngularJS 打开新的标签页实现代码
2017/09/07 Javascript
vuex实现登录状态的存储,未登录状态不允许浏览的方法
2018/03/09 Javascript
webpack vue项目开发环境局域网访问方法
2018/03/20 Javascript
angular1.x ui-route传参的三种写法小结
2018/08/31 Javascript
详解ES6中的Map与Set集合
2019/03/22 Javascript
vue+layui实现select动态加载后台数据的例子
2019/09/20 Javascript
JS实现网页端猜数字小游戏
2020/03/06 Javascript
Map与WeakMap类型在JavaScript中的使用详解
2020/11/18 Javascript
[03:38]TI4西雅图DOTA2前线报道 71专访
2014/07/08 DOTA
[46:16]2018DOTA2亚洲邀请赛3月30日 小组赛B组 iG VS VP
2018/03/31 DOTA
使用Python发送各种形式的邮件的方法汇总
2015/11/09 Python
Python排序搜索基本算法之插入排序实例分析
2017/12/11 Python
Python实现改变与矩形橡胶的线条的颜色代码示例
2018/01/05 Python
Python如何调用外部系统命令
2019/08/07 Python
Python3 requests文件下载 期间显示文件信息和下载进度代码实例
2019/08/16 Python
使用Pytorch来拟合函数方式
2020/01/14 Python
Python IDLE或shell中切换路径的操作
2020/03/09 Python
解决jupyter运行pyqt代码内核重启的问题
2020/04/16 Python
Python Scrapy图片爬取原理及代码实例
2020/06/12 Python
CSS3为背景图设置遮罩并解决遮罩样式继承问题
2020/06/22 HTML / CSS
飞利浦美国官网:Philips美国
2020/02/28 全球购物
安全横幅标语
2014/06/09 职场文书
聘用意向书
2014/07/29 职场文书
优秀党员申报材料
2014/12/18 职场文书
2016年教师师德师风心得体会
2016/01/12 职场文书
公司致全体员工的感谢信
2019/06/24 职场文书
分析并发编程之LongAdder原理
2021/06/29 Java/Android
Python之matplotlib绘制折线图
2022/04/13 Python