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线程的两种编程方式
Apr 14 Python
Django中模型Model添加JSON类型字段的方法
Jun 17 Python
Python手机号码归属地查询代码
May 04 Python
用python实现的线程池实例代码
Jan 06 Python
Django教程笔记之中间件middleware详解
Aug 01 Python
python同时遍历数组的索引和值的实例
Nov 15 Python
python的常用模块之collections模块详解
Dec 06 Python
基于python读取.mat文件并取出信息
Dec 16 Python
Python和Sublime整合过程图示
Dec 25 Python
基于Python执行dos命令并获取输出的结果
Dec 30 Python
Keras实现DenseNet结构操作
Jul 06 Python
Django 实现图片上传和下载功能
Dec 31 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版
2006/10/09 PHP
ThinkPHP+EasyUI之ComboTree中的会计科目树形菜单实现方法
2017/06/09 PHP
Extjs优化(一)删除冗余代码提高运行速度
2013/04/15 Javascript
JavaScript代码编写中各种各样的坑和填坑方法
2014/06/06 Javascript
返回顶部按钮响应滚动且动态显示与隐藏
2014/10/14 Javascript
js实现二代身份证号码验证详解
2014/11/20 Javascript
jQuery手机拨号界面特效代码分享
2015/08/27 Javascript
基于JQuery实现仿网易邮箱全屏动感滚动插件fullPage
2015/09/20 Javascript
jQuery实现浮动层随浏览器滚动条滚动的方法
2015/09/22 Javascript
分享一些常用的jQuery动画事件和动画函数
2015/11/27 Javascript
JavaScript学习笔记之数组去重
2016/03/23 Javascript
JavaScript中的对象和原型(一)
2016/08/12 Javascript
浅谈Javascript中的12种DOM节点类型
2016/08/19 Javascript
Javascript封装id、class与元素选择器方法示例
2017/03/13 Javascript
JavaScript运动框架 多物体任意值运动(三)
2017/05/17 Javascript
基于angular2 的 http服务封装的实例代码
2017/06/29 Javascript
JavaScript实现的九种排序算法
2019/03/04 Javascript
Javascript模拟实现new原理解析
2020/03/03 Javascript
numpy.std() 计算矩阵标准差的方法
2018/07/11 Python
python实现排序算法解析
2018/09/08 Python
对python 调用类属性的方法详解
2019/07/02 Python
解决Django后台ManyToManyField显示成Object的问题
2019/08/09 Python
python RC4加密操作示例【测试可用】
2019/09/26 Python
Python线程障碍对象Barrier原理详解
2019/12/02 Python
python输出第n个默尼森数的实现示例
2020/03/08 Python
Django框架获取form表单数据方式总结
2020/04/22 Python
python numpy实现rolling滚动案例
2020/06/08 Python
python自动化发送邮件实例讲解
2021/01/04 Python
全球采购的街头服饰和帽子:Urban Excess
2020/10/28 全球购物
工程部主管岗位职责
2013/11/17 职场文书
会计人员演讲稿
2014/09/11 职场文书
二手房购房协议书范本
2014/10/05 职场文书
违纪检讨书范文
2015/01/27 职场文书
《青山不老》教学反思
2016/02/22 职场文书
使用Html+Css实现简易导航栏功能(导航栏遇到鼠标切换背景颜色)
2021/04/07 HTML / CSS
面试中canvas绘制图片模糊图片问题处理
2022/03/13 Javascript