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使用paramiko实现远程拷贝文件的方法
Apr 18 Python
python进阶_浅谈面向对象进阶
Aug 17 Python
python TKinter获取文本框内容的方法
Oct 11 Python
python 实现读取一个excel多个sheet表并合并的方法
Feb 12 Python
Python当中的array数组对象实例详解
Jun 12 Python
python爬虫 基于requests模块发起ajax的get请求实现解析
Aug 20 Python
OpenCV+Python--RGB转HSI的实现
Nov 27 Python
python清空命令行方式
Jan 13 Python
Python接口测试文件上传实例解析
May 22 Python
Python web框架(django,flask)实现mysql数据库读写分离的示例
Nov 18 Python
使用pytorch实现线性回归
Apr 11 Python
Django利用AJAX技术实现博文实时搜索
May 06 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中批量修改文件后缀名的函数代码
2011/10/23 PHP
php动态实现表格跨行跨列实现代码
2012/11/06 PHP
php通过获取头信息判断图片类型的方法
2015/06/26 PHP
javascript TextArea动态显示剩余字符
2008/10/22 Javascript
ExtJS 设置级联菜单的默认值
2010/06/13 Javascript
javascript hashtable 修正版 下载
2010/12/30 Javascript
Extjs4 GridPanel的主要配置参数详细介绍
2013/04/18 Javascript
JavaScript和CSS通过expression实现Table居中显示
2013/06/28 Javascript
jquery 扑捉回车键事件代码
2014/04/24 Javascript
html文档中的location对象属性理解及常见的用法
2014/08/13 Javascript
解决JS请求服务器gbk文件乱码的问题
2015/10/16 Javascript
原生javascript+css3编写的3D魔方动画旋扭特效
2016/03/14 Javascript
javascript模块化简单解析
2016/04/07 Javascript
javascript设计模式之单体模式学习笔记
2017/02/15 Javascript
vue实现a标签点击高亮方法
2018/03/17 Javascript
浅谈开发eslint规则
2018/10/01 Javascript
Bootstrap Paginator+PageHelper实现分页效果
2018/12/29 Javascript
vue中轮训器的使用
2019/01/27 Javascript
PyQt5每天必学之日历控件QCalendarWidget
2018/04/19 Python
python列表每个元素同增同减和列表元素去空格的实例
2019/07/20 Python
CSS3属性 line-clamp控制文本行数的使用
2020/03/19 HTML / CSS
HTML5实现页面切换激活的PageVisibility API使用初探
2016/05/13 HTML / CSS
三星美国官网:Samsung美国
2017/02/06 全球购物
怎样建立和理解非常复杂的声明?例如定义一个包含N 个指向返回 指向字符的指针的函数的指针的数组?
2013/03/19 面试题
单位实习证明怎么写
2014/01/17 职场文书
《藏戏》教学反思
2014/02/11 职场文书
开展党的群众路线教育实践活动工作总结
2014/11/05 职场文书
公司2014年度工作总结
2014/12/10 职场文书
学校国庆节活动总结
2015/03/23 职场文书
教师评职称工作总结2015
2015/04/20 职场文书
中学生勤俭节约倡议书
2015/04/29 职场文书
人民检察院起诉书
2015/05/20 职场文书
Python中tkinter的用户登录管理的实现
2021/04/22 Python
浅谈Python数学建模之固定费用问题
2021/06/23 Python
JavaScript流程控制(循环)
2021/12/06 Javascript
如何利用golang运用mysql数据库
2022/03/13 Golang