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获取糗百图片代码实例
Dec 18 Python
Python变量作用范围实例分析
Jul 07 Python
python魔法方法-属性访问控制详解
Jul 25 Python
Python程序中设置HTTP代理
Nov 06 Python
python中返回矩阵的行列方法
Apr 04 Python
Python学习笔记之图片人脸检测识别实例教程
Mar 06 Python
详解Python基础random模块随机数的生成
Mar 23 Python
Python Datetime模块和Calendar模块用法实例分析
Apr 15 Python
flask框架url与重定向操作实例详解
Jan 25 Python
Python字符串hashlib加密模块使用案例
Mar 10 Python
Python3之外部文件调用Django程序操作model等文件实现方式
Apr 07 Python
python程序实现BTC(比特币)挖矿的完整代码
Jan 20 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
PHP调用三种数据库的方法(1)
2006/10/09 PHP
php数组函数序列之array_sum() - 计算数组元素值之和
2011/10/29 PHP
zf框架的校验器InArray使用示例
2014/03/13 PHP
php简单实现无限分类树形列表的方法
2015/03/27 PHP
php+curl 发送图片处理代码分享
2015/07/09 PHP
PHP实现清除wordpress里恶意代码
2015/10/21 PHP
php rmdir使用递归函数删除非空目录实例详解
2016/10/20 PHP
Laravel5.4框架中视图共享数据的方法详解
2019/09/05 PHP
javascript制作坦克大战全纪录(1)
2014/11/27 Javascript
js选项卡的实现方法
2015/02/09 Javascript
javascript生成不重复的随机数
2015/07/17 Javascript
jQuery实现仿美橙互联两级导航菜单效果完整实例
2015/09/17 Javascript
ES6中Array.copyWithin()函数的用法实例详解
2017/09/16 Javascript
Vue如何从1.0迁移到2.0
2017/10/19 Javascript
关于Vue Router中路由守卫的应用及在全局导航守卫中检查元字段的方法
2018/12/09 Javascript
在vue项目中引入highcharts图表的方法
2019/01/21 Javascript
新手如何快速理解js异步编程
2019/06/24 Javascript
Vue全局loading及错误提示的思路与实现
2019/08/09 Javascript
vue 导航内容设置选中状态样式的例子
2019/11/01 Javascript
原生javascript制作的拼图游戏实现方法详解
2020/02/23 Javascript
vue-preview动态获取图片宽高并增加旋转功能的实现
2020/07/29 Javascript
在Python中利用Pandas库处理大数据的简单介绍
2015/04/07 Python
Python网络爬虫出现乱码问题的解决方法
2017/01/05 Python
详解Python里使用正则表达式的ASCII模式
2017/11/02 Python
python实现AES加密解密
2019/03/28 Python
Django之创建引擎索引报错及解决详解
2019/07/17 Python
python实现PCA降维的示例详解
2020/02/24 Python
浅谈多卡服务器下隐藏部分 GPU 和 TensorFlow 的显存使用设置
2020/06/30 Python
CSS3的RGBA中关于整数和百分比值的转换
2015/08/04 HTML / CSS
护理专业自荐信
2013/12/03 职场文书
高中校园广播稿
2014/01/11 职场文书
忠诚教育心得体会
2014/09/03 职场文书
党旗在我心中演讲稿
2014/09/15 职场文书
初中学习计划书范文
2014/09/15 职场文书
上课睡觉检讨书300字
2014/11/18 职场文书
地道战观后感
2015/06/04 职场文书