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的词法分析与语法分析
May 18 Python
python处理文本文件并生成指定格式的文件
Jul 31 Python
Python def函数的定义、使用及参数传递实现代码
Aug 10 Python
Python3利用SMTP协议发送E-mail电子邮件的方法
Sep 30 Python
python调用Matplotlib绘制分布点并且添加标签
May 31 Python
python实现梯度下降算法
Mar 24 Python
Python WEB应用部署的实现方法
Jan 02 Python
使用Python自动生成HTML的方法示例
Aug 06 Python
浅析Python+OpenCV使用摄像头追踪人脸面部血液变化实现脉搏评估
Oct 17 Python
Django前后端分离csrf token获取方式
Dec 25 Python
Keras在mnist上的CNN实践,并且自定义loss函数曲线图操作
May 25 Python
Python Pandas数据分析之iloc和loc的用法详解
Nov 11 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 信号管理知识整理汇总
2017/02/19 PHP
PHP实现生成数据字典功能示例
2018/05/24 PHP
PHP设计模式之装饰器(装饰者)模式(Decorator)入门与应用详解
2019/12/13 PHP
js 将json字符串转换为json对象的方法解析
2013/11/13 Javascript
javascript删除option选项的多种方法总结
2013/11/22 Javascript
Jquery的Tabs内容轮换效果实现代码,几行搞定
2014/02/12 Javascript
jquery插件开发之实现google+圈子选择功能
2014/03/10 Javascript
Node.js中使用socket创建私聊和公聊聊天室
2015/11/19 Javascript
设置点击文本框或图片弹出日历控件的实现代码
2016/05/12 Javascript
判断输入的字符串是否是日期格式的简单方法
2016/07/11 Javascript
jQuery实现右键菜单、遮罩等效果代码
2016/09/27 Javascript
详解jQuery事件
2017/01/13 Javascript
vue中各选项及钩子函数执行顺序详解
2018/08/25 Javascript
jQuery使用bind动态绑定事件无效的处理方法
2018/12/11 jQuery
20多个小事例带你重温ES10新特性(小结)
2019/09/29 Javascript
vue vantUI实现文件(图片、文档、视频、音频)上传(多文件)
2019/10/15 Javascript
vue下canvas裁剪图片实例讲解
2020/04/16 Javascript
Python实现二分查找与bisect模块详解
2017/01/13 Python
python list格式数据excel导出方法
2018/10/31 Python
对python 多线程中的守护线程与join的用法详解
2019/02/18 Python
Python实现的矩阵转置与矩阵相乘运算示例
2019/03/26 Python
Python企业编码生成系统之系统主要函数设计详解
2019/07/26 Python
postman传递当前时间戳实例详解
2019/09/14 Python
pytorch实现CNN卷积神经网络
2020/02/19 Python
python对一个数向上取整的实例方法
2020/06/18 Python
解决python运行效率不高的问题
2020/07/20 Python
Python读取pdf表格写入excel的方法
2021/01/22 Python
html5+CSS3+JS实现七夕言情功能代码
2017/08/28 HTML / CSS
关于读书的演讲稿400字
2014/08/27 职场文书
镇党委书记群众路线整改措施思想汇报
2014/10/13 职场文书
学校师德师风整改方案
2014/10/28 职场文书
精神病医院见习报告
2014/11/03 职场文书
客户经理岗位职责
2015/01/31 职场文书
幼师中班个人总结
2015/02/12 职场文书
nginx简单配置多个server的方法
2021/03/31 Servers
Python安装及建立虚拟环境的完整步骤
2022/06/25 Servers