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开发的单词频率统计工具wordsworth使用方法
Jun 25 Python
python如何派生内置不可变类型并修改实例化行为
Mar 21 Python
python实现简单tftp(基于udp协议)
Jul 30 Python
Python cv2 图像自适应灰度直方图均衡化处理方法
Dec 07 Python
Python玩转PDF的各种骚操作
May 06 Python
pandas实现将dataframe满足某一条件的值选出
Jun 12 Python
Python弹出输入框并获取输入值的实例
Jun 18 Python
Django中create和save方法的不同
Aug 13 Python
python实现对列表中的元素进行倒序打印
Nov 23 Python
Xadmin+rules实现多选行权限方式(级联效果)
Apr 07 Python
Python是什么 Python的用处
May 26 Python
python Scrapy爬虫框架的使用
Jan 21 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生成二维码的两种方法(带logo图像)
2014/03/14 PHP
PHP的Socket通信之UDP通信实例
2015/07/02 PHP
Linux平台php命令行程序处理管道数据的方法
2016/11/10 PHP
JavaScript 类似flash效果的立体图片浏览器
2010/02/08 Javascript
jQuery-Tools-overlay 使用介绍
2012/07/14 Javascript
js中同步与异步处理的方法和区别总结
2013/12/25 Javascript
javascript和jquery实现设置和移除文本框默认值效果代码
2015/01/13 Javascript
基于jQuery实现仿百度首页换肤背景图片切换代码
2015/08/25 Javascript
学习JavaScript设计模式(多态)
2015/11/25 Javascript
AngualrJS中每次$http请求时的一个遮罩层Directive
2016/01/26 Javascript
jQuery fancybox在ie浏览器下无法显示关闭按钮的解决办法
2016/02/19 Javascript
JavaScript Date 知识浅析
2017/01/29 Javascript
JS实现页面打印功能
2017/03/16 Javascript
jQuery插件FusionCharts绘制2D环饼图效果示例【附demo源码】
2017/04/10 jQuery
js实现从左向右滑动式轮播图效果
2017/07/07 Javascript
详解vue.js根据不同环境(正式、测试)打包到不同目录
2018/07/13 Javascript
小程序如何使用分包加载的实现方法
2019/05/22 Javascript
使用python编写udp协议的ping程序方法
2018/04/22 Python
对python dataframe逻辑取值的方法详解
2019/01/30 Python
python通过nmap扫描在线设备并尝试AAA登录(实例代码)
2019/12/30 Python
使用Python第三方库pygame写个贪吃蛇小游戏
2020/03/06 Python
python利用paramiko实现交换机巡检的示例
2020/09/22 Python
Myprotein台湾官方网站:全球领先的运动营养品牌
2018/12/10 全球购物
某公司Java工程师面试题笔试题
2016/03/27 面试题
市政施工员自我鉴定
2014/01/15 职场文书
考试作弊检讨书大全
2014/02/18 职场文书
小学庆六一活动方案
2014/02/28 职场文书
《蜗牛的奖杯》教后反思
2014/04/24 职场文书
广场舞大赛策划方案
2014/05/31 职场文书
2015年度质量工作总结报告
2015/04/27 职场文书
素质教育培训心得体会
2016/01/19 职场文书
2019辞职报告范本3篇!
2019/07/23 职场文书
JavaScript实现班级抽签小程序
2021/05/19 Javascript
PC版《死亡搁浅导剪版》现已发售 展开全新的探险
2022/04/03 其他游戏
Win11电源已接通但未充电怎么办?Win11电源已接通未充电的解决方法
2022/04/05 数码科技
Java无向树分析 实现最小高度树
2022/04/09 Javascript