#_*_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()
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 返回乙個包...