python基于queue和threading實現(xiàn)多線程下載實例
更新時間:2014年10月08日 08:44:48 投稿:shichen2014
這篇文章主要介紹了python基于queue和threading實現(xiàn)多線程下載實例,是比較實用的技巧,需要的朋友可以參考下
本文實例講述了python基于queue和threading實現(xiàn)多線程下載的方法,分享給大家供大家參考。具體方法如下:
主代碼如下:
#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__中調(diào)用threading.Thread.__init__(self),
在run方法中實現(xiàn)耗時的操作
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程序設(shè)計有所幫助。
您可能感興趣的文章:
- Python中多線程thread與threading的實現(xiàn)方法
- Python用threading實現(xiàn)多線程詳解
- python使用threading獲取線程函數(shù)返回值的實現(xiàn)方法
- Python 使用threading+Queue實現(xiàn)線程池示例
- Python線程協(xié)作threading.Condition實現(xiàn)過程解析
- Python3 socket即時通訊腳本實現(xiàn)代碼實例(threading多線程)
- python中threading和queue庫實現(xiàn)多線程編程
- Python中threading庫實現(xiàn)線程鎖與釋放鎖
- Python?threading和Thread模塊及線程的實現(xiàn)
相關(guān)文章
CentOS 7下Python 2.7升級至Python3.6.1的實戰(zhàn)教程
Centos是目前最為流行的Linux服務(wù)器系統(tǒng),其默認(rèn)的Python 2.x,這篇文章主要給大家分享了關(guān)于在CentOS 7下Python 2.7升級至Python3.6.1的實戰(zhàn)教程,文中將升級的步驟一步步的介紹的非常詳細(xì),對大家的理解和學(xué)習(xí)具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧。2017-07-07