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 基础学习教程
Feb 08 Python
python 中文字符串的处理实现代码
Oct 25 Python
如何搜索查找并解决Django相关的问题
Jun 30 Python
使用Python开发windows GUI程序入门实例
Oct 23 Python
python中的随机函数random的用法示例
Jan 27 Python
对python3中pathlib库的Path类的使用详解
Oct 14 Python
浅谈django rest jwt vue 跨域问题
Oct 26 Python
django-rest-framework 自定义swagger过程详解
Jul 18 Python
Python pandas自定义函数的使用方法示例
Nov 20 Python
python如何通过闭包实现计算器的功能
Feb 22 Python
django使用F方法更新一个对象多个对象字段的实现
Mar 28 Python
解决python DataFrame 打印结果不换行问题
Apr 09 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 项目的方法
2007/01/02 PHP
ThinkPHP3.1新特性之内容解析输出详解
2014/06/19 PHP
PHP生成各种常见验证码和Ajax验证过程
2016/01/10 PHP
CI框架整合smarty步骤详解
2016/05/19 PHP
[原创]php正则删除img标签的方法示例
2017/05/27 PHP
PHP多个图片压缩成ZIP的方法
2020/08/18 PHP
PHP实现图片压缩
2020/09/09 PHP
PHP设计模式(四)原型模式Prototype实例详解【创建型】
2020/05/02 PHP
JavaScript异步调用定时方法并停止该方法实现代码
2012/03/16 Javascript
js 获取class的元素的方法 以及创建方法getElementsByClassName
2013/03/11 Javascript
为jQuery-easyui的tab组件添加右键菜单功能的简单实例
2016/10/10 Javascript
BootStrap Table后台分页时前台删除最后一页所有数据refresh刷新后无数据问题
2016/12/28 Javascript
利用js判断手机是否安装某个app的多种方案
2017/02/13 Javascript
easyui关于validatebox实现多重规则验证的方法(必看)
2017/04/12 Javascript
Vue.js 点击按钮显示/隐藏内容的实例代码
2018/02/08 Javascript
Angular5中调用第三方js插件的方法
2018/02/26 Javascript
vue自定义底部导航栏Tabbar的实现代码
2018/09/03 Javascript
一步快速解决微信小程序中textarea层级太高遮挡其他组件
2019/03/04 Javascript
原生JS实现动态添加新元素、删除元素方法
2019/05/05 Javascript
简单了解JavaScript中常见的反模式
2019/06/21 Javascript
JavaScript中的全局属性与方法深入解析
2020/06/14 Javascript
解决vue无法侦听数组及对象属性的变化问题
2020/07/17 Javascript
王纯业的Python学习笔记 下载
2007/02/10 Python
python通过wxPython打开一个音频文件并播放的方法
2015/03/25 Python
Python实现从脚本里运行scrapy的方法
2015/04/07 Python
python爱心表白 每天都是浪漫七夕!
2018/08/18 Python
Python 使用 environs 库定义环境变量的方法
2020/02/25 Python
售后服务经理岗位职责范本
2014/02/22 职场文书
关于运动会的口号
2014/06/07 职场文书
优秀团员事迹材料2000字
2014/08/20 职场文书
庆七一宣传标语
2014/10/08 职场文书
2019中秋节祝福语大全,提前收藏啦
2019/09/10 职场文书
查看nginx配置文件路径和资源文件路径的方法
2021/03/31 Servers
redis 限制内存使用大小的实现
2021/05/08 Redis
Node.js实现爬取网站图片的示例代码
2022/04/04 NodeJs
win10如何更改appdata文件夹的默认位置?
2022/07/15 数码科技