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 相关文章推荐
pandas带有重复索引操作方法
Jun 08 Python
Python socket套接字实现C/S模式远程命令执行功能案例
Jul 06 Python
pycharm debug功能实现跳到循环末尾的方法
Nov 29 Python
Python去除字符串前后空格的几种方法
Mar 04 Python
python批量识别图片指定区域文字内容
Apr 30 Python
Python中的十大图像处理工具(小结)
Jun 10 Python
解决安装python3.7.4报错Can''t connect to HTTPS URL because the SSL module is not available
Jul 31 Python
python爬虫 批量下载zabbix文档代码实例
Aug 21 Python
浅析Django中关于session的使用
Dec 30 Python
Python如何通过Flask-Mail发送电子邮件
Jan 29 Python
Python递归求出列表(包括列表中的子列表)的最大值实例
Feb 27 Python
python中pandas.read_csv()函数的深入讲解
Mar 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小技巧之JS和CSS优化工具Minify的使用方法
2014/05/19 PHP
QQ互联一键登录审核不通过的解决方案
2014/09/10 PHP
PHP使用header()输出图片缓存实例
2014/12/09 PHP
php使用substr()和strpos()联合查找字符串中某一特定字符的方法
2015/05/12 PHP
THINKPHP截取中文字符串函数实例代码
2017/03/20 PHP
js直接编辑当前cookie的脚本
2008/09/14 Javascript
基于jQuery的倒计时实现代码
2012/05/30 Javascript
js防止表单重复提交实现代码
2012/09/05 Javascript
JavaScript字符串对象charAt方法入门实例(用于取得指定位置的字符)
2014/10/17 Javascript
JavaScript中的alert()函数使用技巧详解
2014/12/29 Javascript
js控制div弹出层实现方法
2015/05/11 Javascript
javascript日期格式化方法小结
2015/12/17 Javascript
js 实现数值的千分位及保存小数方法(推荐)
2016/08/01 Javascript
你知道setTimeout是如何运行的吗?
2016/08/16 Javascript
bootstrap基本配置_动力节点Java学院整理
2017/07/14 Javascript
详解jquery插件jquery.viewport.js学习使用方法
2017/09/08 jQuery
JS实现倒序输出的几种常用方法示例
2019/04/13 Javascript
Vue中消息横向滚动时setInterval清不掉的问题及解决方法
2019/08/23 Javascript
vue-cli3使用mock数据的方法分析
2020/03/16 Javascript
利用Python演示数型数据结构的教程
2015/04/03 Python
python optparse模块使用实例
2015/04/09 Python
Python分割指定页数的pdf文件方法
2018/10/26 Python
详解Numpy中的数组拼接、合并操作(concatenate, append, stack, hstack, vstack, r_, c_等)
2019/05/27 Python
python使用pandas处理excel文件转为csv文件的方法示例
2019/07/18 Python
纯CSS3实现给头像加个光芒四射且旋转的背景动画效果
2014/05/07 HTML / CSS
HTML5 绘制图像(上)之:关于canvas元素引领下一代web页面的问题
2013/04/24 HTML / CSS
意大利独特而优质的家居用品:Fazzini
2018/12/05 全球购物
英国男女豪华配饰和礼品网站:Black.co.uk
2020/02/28 全球购物
孝老爱亲模范事迹
2014/01/24 职场文书
环境科学专业优秀毕业生自荐书
2014/02/03 职场文书
产品陈列协议书(标准版)
2014/09/17 职场文书
Go语言中的UTF-8实现
2021/04/26 Golang
MySQL连接查询你真的学会了吗?
2021/06/02 MySQL
Spring mvc是如何实现与数据库的前后端的连接操作的?
2021/06/30 Java/Android
Python中的 Set 与 dict
2022/03/13 Python
Mysql如何实现不存在则插入,存在则更新
2022/03/25 MySQL