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调用cmd命令行制作刷博器
Jan 13 Python
Python正则表达式教程之二:捕获篇
Mar 02 Python
使用python 爬虫抓站的一些技巧总结
Jan 10 Python
python3调用windows dos命令的例子
Aug 14 Python
python对常见数据类型的遍历解析
Aug 27 Python
Python通过cv2读取多个USB摄像头
Aug 28 Python
Python3 全自动更新已安装的模块实现
Jan 06 Python
python GUI库图形界面开发之PyQt5开发环境配置与基础使用
Feb 25 Python
python检查目录文件权限并修改目录文件权限的操作
Mar 11 Python
python小白切忌乱用表达式
May 29 Python
python二维图制作的实例代码
Dec 03 Python
python缺失值填充方法示例代码
Dec 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
CodeIgniter启用缓存和清除缓存的方法
2014/06/12 PHP
抛弃 PHP 代价太高
2016/04/26 PHP
PHP7使用ODBC连接SQL Server2008 R2数据库示例【基于thinkPHP5.1框架】
2019/05/06 PHP
Laravel框架数据库迁移操作实例详解
2020/04/06 PHP
php中get_object_vars()在数组的实例用法
2021/02/22 PHP
js DOM 元素ID就是全局变量
2012/09/20 Javascript
JS控制表单提交的方法
2015/07/09 Javascript
jQuery实现宽屏图片轮播实例教程
2015/11/24 Javascript
jQuery操作复选框(CheckBox)的取值赋值实现代码
2017/01/10 Javascript
详解angular2封装material2对话框组件
2017/03/03 Javascript
JavaScript实现随机数生成器(去重)
2017/10/13 Javascript
jquery radio 动态控制选中失效问题的解决方法
2018/02/28 jQuery
发布Angular应用至生产环境的方法
2018/12/10 Javascript
JS实现省市县三级下拉联动
2020/04/10 Javascript
前端vue+elementUI如何实现记住密码功能
2020/09/20 Javascript
记录Django开发心得
2014/07/16 Python
Python中字典的基本知识初步介绍
2015/05/21 Python
Python本地及虚拟解释器配置过程解析
2020/10/13 Python
用HTML5.0制作网页的教程
2010/05/30 HTML / CSS
BNKR中国官网:带你感受澳洲领先潮流时尚
2018/08/21 全球购物
英国探险旅游专家:Explore
2018/12/20 全球购物
医学毕业生自我鉴定
2013/10/30 职场文书
《小松树和大松树》教学反思
2014/02/20 职场文书
简历里的自我评价范文
2014/02/24 职场文书
人事专员的岗位职责
2014/03/01 职场文书
教师批评与自我批评(群众路线)
2014/10/15 职场文书
村党支部书记个人对照材料汇报
2014/10/26 职场文书
分居协议书范本(律师见证版)
2014/11/26 职场文书
幼儿园父亲节活动总结
2015/02/12 职场文书
公司文体活动总结
2015/05/07 职场文书
爱国电影观后感
2015/06/19 职场文书
党校培训学习心得体会
2016/01/06 职场文书
python字符串的多行输出的实例详解
2021/06/08 Python
详细聊聊vue中组件的props属性
2021/11/02 Vue.js
关于MySQL临时表为什么可以重名的问题
2022/03/22 MySQL
Python自动操作神器PyAutoGUI的使用教程
2022/06/16 Python