python基于queue和threading实现多线程下载实例
作者:shichen2014 发布时间:2023-02-04 09:58:22
标签:python,threading,多线程,下载
本文实例讲述了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程序设计有所帮助。


猜你喜欢
- 引言本篇文章记录仿写一个el-collapse组件细节,从而有助于大家更好理解饿了么ui对应组件具体工作细节。本文是elementui源码学
- 一、什么是系统调用In computing, a system call is the programmatic way in which
- 本文实例分析了MySQL索引用法。分享给大家供大家参考,具体如下:MYSQL描述:一个文章库,里面有两个表:category和article
- 本文实例讲述了JS中getElementsByClassName与classList兼容性问题解决方案。分享给大家供大家参考,具体如下:do
- 前言:str转换为json格式,前提一定需要保证这个str的格式和json是一致的,即左边最外层是大括号,右边的最外层是大括号。如果不一致,
- 使用 str.split() 方法将字符串转换为数组,例如 array = string.split(',')。 str.s
- 本文实例为大家分享了python名片管理系统的开发代码,供大家参考,具体内容如下利用面向对象的开发方法,开发名片管理系统,要求用文件存储数据
- 前言……最近在学习yolo1、yolo2和yolo3,写这篇博客主要是为了让自己对yolo2的结
- 最近遇到这个函数,但查的中文博客里的解释貌似不是很到位,这里翻译一下stackoverflow上的回答并加上自己的理解。在pytorch中,
- 查询本日记录SELECT * FROM messages WHERE CONVERT(Nvarchar, CreateDate, 111)
- MAC地址也叫物理地址、硬件地址,由网络设备制造商生产时烧录在网卡(Network lnterface Card)的EPROM(一种闪存芯片
- 1. Python的文件类型1. 源代码--直接由Python解析vi 1.py #!/usr/bin/pythonprint 'h
- 一、CSS HACK以下两种方法几乎能解决现今所有HACK.1, !important随着IE7对!important的支持, !impor
- 一、实现#tmp表内容如下:实现group_concat的sql语句为:SelectRegionID,STUFF((SELECT '
- 一.思路1.整体思路2.代码思路思路很简单,就是用python发送请求,提取响应体中的状态码加以判断,最后保存到本地txt文本中,以实现网站
- ''推拉门''动效也可以称作"手风琴"效果,大多数效果实现的思路基本是一样的,下面介绍两
- 本文在前面文章基础上介绍tkinter添加图片和文本,在这之前,我们需要安装一个图片库,叫Pillow,这个需要下载exe文件,根据下面图片
- 方法一使用findspark使用pip安装findspark:pip install findspark在py文件中引入findspark:
- pytorch在数据中采用Dataset的数据保存方式,需要继承data.Dataset类,如果需要自己处理数据的话,需要实现两个基本方法。
- 我们可以使用Basemap这个工具包来实现中国地图的绘制首先需要加载一些包:import numpy as npimport matplot