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提取html文件中的特定数据的实现代码
Mar 24 Python
深入源码解析Python中的对象与类型
Dec 11 Python
Python使用functools实现注解同步方法
Feb 06 Python
Python 读取图片文件为矩阵和保存矩阵为图片的方法
Apr 27 Python
Python中if elif else及缩进的使用简述
May 31 Python
Python中交换两个元素的实现方法
Jun 29 Python
python实现ID3决策树算法
Aug 29 Python
Python中collections模块的基本使用教程
Dec 07 Python
python实现多进程通信实例分析
Sep 01 Python
Python 实现毫秒级淘宝抢购脚本的示例代码
Sep 16 Python
Python 使用threading+Queue实现线程池示例
Dec 21 Python
pytorch 彩色图像转灰度图像实例
Jan 13 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使用CURL_MULTI实现多线程采集的例子
2014/07/29 PHP
PHP中的traits实现代码复用使用实例
2015/05/13 PHP
php使用ffmpeg获取视频信息并截图的实现方法
2016/05/03 PHP
使用WAMP搭建PHP本地开发环境
2017/05/10 PHP
PHP+redis实现的购物车单例类示例
2019/02/02 PHP
PHP删除数组中特定元素的两种方法
2019/02/28 PHP
laravel在中间件内生成参数并且传递到控制器中的2种姿势
2019/10/15 PHP
javascript 可以拖动的DIV(二)
2009/06/26 Javascript
js实现简单鼠标跟随效果的方法
2015/04/10 Javascript
jQuery左侧大图右侧小图焦点图幻灯切换代码分享
2015/08/19 Javascript
使用node.js搭建服务器
2017/05/20 Javascript
JS实现点击按钮可实现编辑功能
2018/07/03 Javascript
vue-cli脚手架搭建的项目去除eslint验证的方法
2018/09/29 Javascript
JS实现点击按钮随机生成可拖动的不同颜色块示例
2019/01/30 Javascript
vue+element实现打印页面功能
2019/05/20 Javascript
使用layer弹窗提交表单时判断表单是否输入为空的例子
2019/09/26 Javascript
jQuery zTree如何改变指定节点文本样式
2020/10/16 jQuery
python在windows下实现ping操作并接收返回信息的方法
2015/03/20 Python
Saltstack快速入门简单汇总
2016/03/01 Python
Python单元测试实例详解
2018/05/25 Python
Python开发网站目录扫描器的实现
2019/02/21 Python
python求质数列表的例子
2019/11/24 Python
python实现提取str字符串/json中多级目录下的某个值
2020/02/27 Python
Window系统下Python如何安装OpenCV库
2020/03/05 Python
python 基于pygame实现俄罗斯方块
2021/03/02 Python
最新的大学生找工作自我评价
2013/09/29 职场文书
小学新学期寄语
2014/04/02 职场文书
医学求职信
2014/05/28 职场文书
考试作弊检讨书1000字(5篇)
2014/10/19 职场文书
2014年度工作总结报告
2014/12/15 职场文书
招标保密承诺书
2015/01/20 职场文书
慈善献爱心倡议书
2015/04/27 职场文书
2015小学教师年度考核工作总结
2015/05/12 职场文书
领导莅临指导欢迎词
2015/09/30 职场文书
何时使用Map来代替普通的JS对象
2021/04/29 Javascript
MySQL数据库 任意ip连接方法
2022/05/20 MySQL