python多線程多隊列
程序大概內容如下:
程序中設置兩個隊列分別為queue負責存放網址,out_queue負責存放網頁的源代碼。
ThreadUrl線程負責將隊列queue中網址的源代碼urlopen,存放到out_queue隊列中。
DatamineThread線程負責使用BeautifulSoup模塊從out_queue網頁的源代碼中提取出想要的內容并輸出。
這只是一個基本的框架,可以根據需求繼續擴展。
import Queue import threading import urllib2 import time from BeautifulSoup import BeautifulSoup hosts = ["http://yahoo.com","http://taobao.com","http://apple.com", "http://ibm.com","http://www.amazon.cn"] queue = Queue.Queue()#存放網址的隊列 out_queue = Queue.Queue()#存放網址頁面的隊列 class ThreadUrl(threading.Thread): def __init__(self,queue,out_queue): threading.Thread.__init__(self) self.queue = queue self.out_queue = out_queue def run(self): while True: host = self.queue.get() url = urllib2.urlopen(host) chunk = url.read() self.out_queue.put(chunk)#將hosts中的頁面傳給out_queue self.queue.task_done()#傳入一個相當于完成一個任務 class DatamineThread(threading.Thread): def __init__(self,out_queue): threading.Thread.__init__(self) self.out_queue = out_queue def run(self): while True: chunk = self.out_queue.get() soup = BeautifulSoup(chunk)#從源代碼中搜索title標簽的內容 print soup.findAll(['title']) self.out_queue.task_done() start = time.time() def main(): for i in range(5): t = ThreadUrl(queue,out_queue)#線程任務就是將網址的源代碼存放到out_queue隊列中 t.setDaemon(True)#設置為守護線程 t.start() #將網址都存放到queue隊列中 for host in hosts: queue.put(host) for i in range(5): dt = DatamineThread(out_queue)#線程任務就是從源代碼中解析出<title>標簽內的內容 dt.setDaemon(True) dt.start() queue.join()#線程依次執行,主線程最后執行 out_queue.join() main() print "Total time :%s"%(time.time()-start)
本文由用戶 n342 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!