python執行緒池處理檔案和Queue

2021-06-08 01:12:32 字數 2920 閱讀 5584

#_*_encoding:utf-8_*_

importthreading  

importqueue  

fromdispo***mlimport*  

classthreadpoolmgr():  

def__init__(self,work_queue,thread_num=2):  

self.threads=  

self.work_queue=work_queue  

self.init_threadpool(thread_num)  

definit_threadpool(self,thread_num):  

foriinrange(thread_num):  

defwait_allcomplete(self):  

foritemin

self.threads:  

ifitem.isalive():  

item.join()  

classmythread(threading.thread):  

def__init__(self,work_queue):  

threading.thread.__init__(self)  

self.work_queue=work_queue  

self.start()  

defrun(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執行緒池異常處理方案

from multiprocessing.pool import threadpool 建立乙個執行緒池 pool size 4 thread pool threadpool pool size 呼叫map方法,將會對迭代物件拆包並各自開啟執行緒交由目標函式處理 pool output thread...

python 執行緒池 Python的執行緒池

usr bin env python coding utf 8 concurrent 用於執行緒池和程序池程式設計而且更加容易,在python3.2中才有。import sys from concurrent.futures import threadpoolexecutor,as complete...

python 執行緒池 鎖 python多執行緒和鎖

python中,有兩個標準模組thread和threading可以實現多執行緒,不過threading更加高階,推薦使用threading。threading 模組提供的常用方法 threading.currentthread 返回當前的執行緒變數。threading.enumerate 返回乙個包...