当前位置:首页 > python > 正文

python基于queue和threading实现多线程下载实例


python基于queue和threading实现多线程下载实例

这篇文章主要介绍了python基于queue和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 '%stok' % (md5)         else:           print>>config['log'], '%st%s' % (md5, 'failed')       except Exception, e:         print>>config['log'], '%st%s' % (md5, str(e))    

希望本文所述对大家的Python程序设计有所帮助。

标签:
上一篇: 下一篇:

暂无评论

发表评论

不理你。 不要啊! 吃饭。 吃惊。 吃西瓜。 飞吻! 恭喜! Hi 纠结! 膜拜! OK 抛媚眼。 泡泡糖。 抛钱。 忍! 生闷气! 调皮。 偷看。 委屈。 献花。 疑问? 抓狂!

小提示:Ctrl+Enter快速提交助您一臂之力~
2021-05-11 00:04:35
加载中……