python線程池處理檔案和Queue

來源:互聯網
上載者:User
#_*_encoding:utf-8_*_import threadingimport Queuefrom DisposeXml import *class ThreadPoolMgr():    def __init__(self,work_queue,thread_num=2):        self.threads=[]        self.work_queue=work_queue        self.init_threadpool(thread_num)        def init_threadpool(self,thread_num):        for i in range(thread_num):            self.threads.append(Mythread(self.work_queue));        def wait_allcomplete(self):        for item in self.threads:            if item.isAlive():                item.join()        class Mythread(threading.Thread):    def __init__(self,work_queue):        threading.Thread.__init__(self)        self.work_queue=work_queue        self.start()        def run(self):        # 從任務隊列中取任務,一直等到任務隊列為空白        while not self.work_queue.empty():            dir = self.work_queue.get()            os.chdir(dir)            self.disposeMetaXml=DisposeTableMetaXml(TableMetadataFileName)            self.disposeMetaXml.Analysis_Metadata()            if -1==self.disposeMetaXml.connect2Db():                QMessageBox.about(self,u"失敗",u"資料庫連接失敗")            self.disposeMetaXml.QueryMysql()            self.disposeMetaXml.remove_tmp_file()        print self.getName(),' work queue is empty'                if __name__=='__main__':    p=ThreadPoolMgr()    p.wait_allcomplete()        

python的Queue模組:  import Queue

預設構造的queue大小為0,當然也可以指定大小  myqueue = Queue.Queue(maxsize = 10)

入隊  myqueue.put(T)  隊列中可以放任何格式對象或者組合。 

調用隊列對象的put()方法在隊尾插入一個項目。put()有兩個參數,第一個item為必需的,為插入項目的值;第二個block為選擇性參數,預設為1。如果隊列當前為空白且block為1,put()方法就使調用線程暫停,直到空出一個資料單元。如果block為0,put方法將引發Full異常。

出對 myqueue.get()

調用隊列對象的get()方法從隊頭刪除並返回一個項目。選擇性參數為block,預設為True。如果隊列為空白且block為True,get()就使調用線程暫停,直至有項目可用。如果隊列為空白且block為False,隊列將引發Empty異常。

python
queue模組有三種隊列:
1、python queue模組的FIFO隊列先進先出。
2、LIFO類似於堆。即先進後出。
3、還有一種是優先順序隊列層級越低越先出來。 


針對這三種隊列分別有三個建構函式:
1、class Queue.Queue(maxsize) FIFO 
2、class Queue.LifoQueue(maxsize) LIFO 
3、class Queue.PriorityQueue(maxsize) 優先順序隊列 


介紹一下此包中的常用方法:


Queue.qsize() 返回隊列的大小 
Queue.empty() 如果隊列為空白,返回True,反之False 
Queue.full() 如果隊列滿了,返回True,反之False
Queue.full 與 maxsize 大小對應 
Queue.get([block[, timeout]]) 擷取隊列,timeout等待時間 
Queue.get_nowait() 相當Queue.get(False)
非阻塞 Queue.put(item) 寫入隊列,timeout等待時間 
Queue.put_nowait(item) 相當Queue.put(item, False)
Queue.task_done() 在完成一項工作之後,Queue.task_done() 函數向任務已經完成的隊列發送一個訊號

Queue.join() 實際上意味著等到隊列為空白,再執行別的操作

明天詳細介紹些python的線程。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.