【Python】模組之queue
Queue類即是一個佇列的同步實現。佇列長度可為無限或者有限。可透過Queue的建構函式的可選引數maxsize來設定佇列長度。如果maxsize小於1就表示佇列長度無限。
建立一個 佇列 物件 最大長度為10
from Queue import Queue
q = Queue(maxsize = 10)
import Queue
q = Queue.Queue(maxsize = 10)
python queue模組有三種佇列:
1、python queue模組的FIFO佇列先進先出。其建構函式
class Queue.Queue(maxsize)
2、LIFO類似於堆。即先進後出。其建構函式
class Queue.LifoQueue(maxsize)
3、還有一種是優先順序佇列級別越低越先出來。其建構函式
class Queue.PriorityQueue(maxsize)
Queue的常用方法:
Queue.qsize() #返回佇列的大小
Queue.empty() #如果佇列為空,返回True,反之False
Queue.full() #如果佇列滿了,返回True,反之False
Queue.full 與 maxsize 大小對應
Queue.get([block[, timeout]]) #獲取佇列,timeout等待時間,呼叫佇列物件的get()方法從隊頭刪除並返回一個專案。可選引數為block,預設為True。如果佇列為空且block為True,get()就使呼叫執行緒暫停,直至有專案可用。如果佇列為空且block為False,佇列將引發Empty異常。
Queue.get_nowait() #相當Queue.get(False)
Queue.put(item) #非阻塞寫入佇列,timeout等待時間,呼叫佇列物件的put()方法在隊尾插入一個專案。
put()有兩個引數,第一個item為必需的,為插入專案的值;第二個block為可選引數,預設為1。如果佇列當前為空且block為1,put()方法就使呼叫執行緒暫停,直到空出一個資料單元。如果block為0,put方法將引發Full異常。
Queue.put_nowait(item) #相當Queue.put(item, False)
Queue.task_done() #在完成一項工作之後,Queue.task_done() 函式向任務已經完成的佇列傳送一個訊號Queue.join() 實際上意味著等到佇列為空,再執行別的操作.
如下程式碼實現了比較經典的生產者和消費者模型:
from Queue import Queue
import random
import threading
import time
#Producer thread
class Producer(threading.Thread):
def __init__(self, t_name, queue):
threading.Thread.__init__(self, name=t_name)
self.data=queue
def run(self):
for i in range(5):
print "%s: %s is producing %d to the queue!" %(time.ctime(), self.getName(), i)
self.data.put(i)
time.sleep(random.randrange(10)/5)
print "%s: %s finished!" %(time.ctime(), self.getName())
#Consumer thread
class Consumer(threading.Thread):
def __init__(self, t_name, queue):
threading.Thread.__init__(self, name=t_name)
self.data=queue
def run(self):
for i in range(5):
val = self.data.get()
print "%s: %s is consuming. %d in the queue is consumed!" %(time.ctime(), self.getName(), val)
time.sleep(random.randrange(10))
print "%s: %s finished!" %(time.ctime(), self.getName())
#Main thread
def main():
queue = Queue()
producer = Producer('Pro.', queue)
consumer = Consumer('Con.', queue)
producer.start()
consumer.start()
producer.join()
consumer.join()
print 'All threads terminate!'
if __name__ == '__main__':
main()
程式輸出
[root@rac1 python]# python prdcust.py
start consumer
start producer
producing...1
producing...2
producing...3
producing...4
producing...5
5
consuming...4
consuming...3
consuming...2
consuming...1
consuming...0
0
0
參考
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26250550/viewspace-1803176/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 每週一個 Python 模組 | QueuePython
- Python模組之urllib模組Python
- python模組之collections模組Python
- python之模組Python
- python模組之configparserPython
- python模組之hashlibPython
- Python模組之jsonPythonJSON
- python之shutil模組Python
- python–模組之基本Python
- python–模組之random隨機數模組Pythonrandom隨機
- python–模組之os操作檔案模組Python
- Python基礎之模組Python
- Python學習之模組Python
- Python之time模組詳解Python
- Python學習之 datetime模組Python
- python模組之os.pathPython
- Python學習之常用模組Python
- python 模組:itsdangerous 模組Python
- Python模組:time模組Python
- python之匯入模組的方法Python
- python常用模組之paramiko與sshPython
- Python學習之模組與包Python
- python之排序操作及heapq模組Python排序
- python 基礎之模組與包Python
- Python學習之如何引用Python自定義模組?Python
- python之pymsql模組相關介紹PythonSQL
- Python之logging模組相關介紹Python
- python之 threading(多執行緒)模組Pythonthread執行緒
- python之logging日誌模組詳解Python
- Python 模組Python
- python基礎之-sys模組、os模組基本介紹(未完成)Python
- [Python模組學習] glob模組Python
- 模組學習之hashlib模組
- 模組學習之logging模組
- Python自動化運維之IPy模組Python運維
- 如何使用queue模組實現多執行緒爬蟲執行緒爬蟲
- Python中模組是什麼?Python有哪些模組?Python
- python開發學習之如何更好的引用Python模組?Python
- 豬行天下之Python基礎——10.2 Python常用模組(下)Python