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 相关文章推荐
Pytorch入门之mnist分类实例
Apr 14 Python
对Pandas MultiIndex(多重索引)详解
Nov 16 Python
python实现简单的文字识别
Nov 27 Python
Python实现网站表单提交和模板
Jan 15 Python
Python使用Slider组件实现调整曲线参数功能示例
Sep 06 Python
Python with关键字,上下文管理器,@contextmanager文件操作示例
Oct 17 Python
Python高级property属性用法实例分析
Nov 19 Python
Python实现结构体代码实例
Feb 10 Python
Python 操作 MySQL数据库
Sep 18 Python
Python3爬虫RedisDump的安装步骤
Feb 20 Python
python 如何用map()函数创建多线程任务
Apr 07 Python
PyTorch梯度裁剪避免训练loss nan的操作
May 24 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 获取时间今天明天昨天时间戳的详解
2013/06/20 PHP
PHPExcel实现的读取多工作表操作示例
2020/04/14 PHP
picChange 图片切换特效的函数代码
2010/05/06 Javascript
jQuery ajax serialize()方法的使用以及常见问题解决
2013/01/27 Javascript
浏览器窗口加载和大小改变事件示例
2014/02/27 Javascript
jQuery实用函数用法总结
2014/08/29 Javascript
jQuery实现不断闪烁文字的方法
2015/05/15 Javascript
详解JavaScript中的构造器Constructor模式
2016/01/14 Javascript
jQuery查找节点方法完整实例
2016/09/13 Javascript
JavaScript实现淘宝京东6位数字支付密码效果
2018/08/18 Javascript
使用Node.js在深度学习中做图片预处理的方法
2019/09/18 Javascript
初学vue出现空格警告的原因及其解决方案
2019/10/31 Javascript
vue使用nprogress加载路由进度条的方法
2020/06/04 Javascript
[02:28]PWL开团时刻DAY3——Ink Ice与DeMonsTer之间的勾心斗角
2020/11/03 DOTA
Django学习笔记之Class-Based-View
2017/02/15 Python
Python管理Windows服务小脚本
2018/03/12 Python
python2.7和NLTK安装详细教程
2018/09/19 Python
在PyCharm下使用 ipython 交互式编程的方法
2019/01/17 Python
Python列表原理与用法详解【创建、元素增加、删除、访问、计数、切片、遍历等】
2019/10/30 Python
基于python实现从尾到头打印链表
2019/11/02 Python
python实现ssh及sftp功能(实例代码)
2020/03/16 Python
加拿大知名的国际儿童品牌:Hatley
2016/11/09 全球购物
美国专业级皮肤病和spa品质护肤品的高级零售网站:SkinCareRx
2017/02/06 全球购物
JDO的含义
2012/11/17 面试题
一套C#面试题
2013/10/09 面试题
Servlet的实例是在生命周期什么时候创建的?配置servlet最重要的是什么?
2012/05/30 面试题
化学教师教学反思
2014/01/17 职场文书
办公室人员先进事迹
2014/01/27 职场文书
元旦晚会主持词
2014/03/24 职场文书
就业协议书样本
2014/08/20 职场文书
作风建设年活动总结
2014/08/27 职场文书
语文课外活动总结
2014/08/27 职场文书
劳动模范获奖感言
2015/07/31 职场文书
启动Tomcat时出现大量乱码的解决方法
2021/06/21 Java/Android
面试提问mysql一张表到底能存多少数据
2022/03/13 MySQL
Java获取字符串编码格式实现思路
2022/09/23 Java/Android