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中的浅复制与深复制
Jul 02 Python
Python实现周期性抓取网页内容的方法
Nov 04 Python
对python中的logger模块全面讲解
Apr 28 Python
numpy返回array中元素的index方法
Jun 27 Python
Python检测数据类型的方法总结
May 20 Python
Python实现FM算法解析
Jun 18 Python
Python在OpenCV里实现极坐标变换功能
Sep 02 Python
基于Python新建用户并产生随机密码过程解析
Oct 08 Python
Python存储读取HDF5文件代码解析
Nov 25 Python
Python虚拟环境virtualenv创建及使用过程图解
Dec 08 Python
Python如何使用logging为Flask增加logid
Mar 30 Python
win10+anaconda安装yolov5的方法及问题解决方案
Apr 29 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 XML数据解析代码
2010/05/26 PHP
使用php显示搜索引擎来的关键词
2014/02/13 PHP
phpword插件导出word文件时中文乱码问题处理方案
2014/08/19 PHP
thinkphp在模型中自动完成session赋值示例代码
2014/09/09 PHP
PHP易混淆函数的区别及用法汇总
2014/11/22 PHP
php恢复数组的key为数字序列的方法
2015/04/28 PHP
PHP简单实现上一页下一页功能示例
2016/09/14 PHP
深入解析PHP底层机制及相关原理
2020/12/11 PHP
JavaScript中的事件处理
2008/01/16 Javascript
javascript getElementsByClassName实现代码
2010/10/11 Javascript
Javascript模块化编程(一)AMD规范(规范使用模块)
2013/01/17 Javascript
JS添加删除一组文本框并对输入信息加以验证判断其正确性
2013/04/11 Javascript
JS中的this变量的使用介绍
2013/10/21 Javascript
JS获得QQ号码的昵称,头像,生日的简单实例
2013/12/04 Javascript
JavaScript作用域链示例分享
2014/05/27 Javascript
删除javascript中注释语句的正则表达式
2014/06/11 Javascript
如何在MVC应用程序中使用Jquery
2014/11/17 Javascript
举例讲解JavaScript substring()的使用方法
2015/11/09 Javascript
详解AngularJS实现表单验证
2015/12/10 Javascript
JavaScript学习笔记整理_setTimeout的应用
2016/09/19 Javascript
Bootstrap 模态对话框只加载一次 remote 数据的完美解决办法
2017/07/09 Javascript
Three.js实现绘制字体模型示例代码
2017/09/26 Javascript
ES6解构赋值的功能与用途实例分析
2017/10/31 Javascript
vue中使用vee-validator完成表单校验方案
2019/11/01 Javascript
extjs4图表绘制之折线图实现方法分析
2020/03/06 Javascript
使用Vue-cli 中为单独页面设置背景图片铺满全屏
2020/07/17 Javascript
JavaScript获取时区实现过程解析
2020/09/24 Javascript
iview实现动态表单和自定义验证时间段重叠
2021/01/10 Javascript
对numpy中array和asarray的区别详解
2018/04/17 Python
python pygame实现2048游戏
2018/11/20 Python
python实现弹跳小球
2019/05/13 Python
python内打印变量之%和f的实例
2020/02/19 Python
Clarks鞋美国官网:全球领军鞋履品牌
2017/05/13 全球购物
LN-CC美国:伦敦时尚生活的缩影
2019/02/19 全球购物
单位计划生育责任书
2015/05/09 职场文书
vue修饰符.capture和.self的区别
2022/04/22 Vue.js