中文字幕在线观看,亚洲а∨天堂久久精品9966,亚洲成a人片在线观看你懂的,亚洲av成人片无码网站,亚洲国产精品无码久久久五月天

python多線程多隊(duì)列

2018-07-20    來(lái)源:open-open

容器云強(qiáng)勢(shì)上線!快速搭建集群,上萬(wàn)Linux鏡像隨意使用

程序大概內(nèi)容如下:

程序中設(shè)置兩個(gè)隊(duì)列分別為queue負(fù)責(zé)存放網(wǎng)址,out_queue負(fù)責(zé)存放網(wǎng)頁(yè)的源代碼。

ThreadUrl線程負(fù)責(zé)將隊(duì)列queue中網(wǎng)址的源代碼urlopen,存放到out_queue隊(duì)列中。

DatamineThread線程負(fù)責(zé)使用BeautifulSoup模塊從out_queue網(wǎng)頁(yè)的源代碼中提取出想要的內(nèi)容并輸出。

這只是一個(gè)基本的框架,可以根據(jù)需求繼續(xù)擴(kuò)展。

    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()#存放網(wǎng)址的隊(duì)列  
    out_queue = Queue.Queue()#存放網(wǎng)址頁(yè)面的隊(duì)列  
      
    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中的頁(yè)面?zhèn)鹘oout_queue  
                self.queue.task_done()#傳入一個(gè)相當(dāng)于完成一個(gè)任務(wù)  
      
    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標(biāo)簽的內(nèi)容  
                print soup.findAll(['title'])  
                self.out_queue.task_done()  
      
    start = time.time()  
    def main():  
        for i in range(5):  
            t = ThreadUrl(queue,out_queue)#線程任務(wù)就是將網(wǎng)址的源代碼存放到out_queue隊(duì)列中  
            t.setDaemon(True)#設(shè)置為守護(hù)線程  
            t.start()  
      
        #將網(wǎng)址都存放到queue隊(duì)列中  
        for host in hosts:  
            queue.put(host)  
      
        for i in range(5):  
            dt = DatamineThread(out_queue)#線程任務(wù)就是從源代碼中解析出<title>標(biāo)簽內(nèi)的內(nèi)容  
            dt.setDaemon(True)  
            dt.start()  
      
        queue.join()#線程依次執(zhí)行,主線程最后執(zhí)行  
        out_queue.join()  
      
    main()  
    print "Total time :%s"%(time.time()-start)  

標(biāo)簽: 代碼 搜索

版權(quán)申明:本站文章部分自網(wǎng)絡(luò),如有侵權(quán),請(qǐng)聯(lián)系:west999com@outlook.com
特別注意:本站所有轉(zhuǎn)載文章言論不代表本站觀點(diǎn)!
本站所提供的圖片等素材,版權(quán)歸原作者所有,如需使用,請(qǐng)與原作者聯(lián)系。

上一篇:C# 發(fā)起HTTP請(qǐng)求并檢查回應(yīng)的Cookie數(shù)據(jù)

下一篇:android雙擊返回鍵退出程序