分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!
作為標準庫中的queue模組,在實際的開發中也是很常見的。其實資料結構這種東西,在任何的程式語言中都是相通的,無非表達方式有些不同罷了。那麼, 今天就來看看如何在python中使用佇列。
import
queueq =
queue
.queue(maxsize =
10)
可見對於模組queue裡面的類queue而言,是可以在初始化的時候指定佇列大小的。佇列長度可為無限或者有限。由可選引數maxsize來設定佇列長度。需要注意的是:
如果maxsize小於1就表示佇列長度無限。但這樣的話,意義不大。
q.put(item)
呼叫佇列物件的put()方法在隊尾插入乙個專案。put()有兩個引數:
如果佇列當前為空且block為1,put()方法就使呼叫執行緒暫停,直到空出乙個資料單元。如果block為0,put方法將引發full異常。
q.get()
呼叫佇列物件的get()方法從隊頭刪除並返回乙個專案。可選引數為block,預設為true。
如果隊列為空且block為true,get()就使呼叫執行緒暫停,直至有專案可用。如果隊列為空且block為false,佇列將引發empty異常。
python 中queue模組有三種佇列及建構函式:
q =
queue
.queue()):
下面來看乙個典型的生產者與消費者問題。
#!/usr/bin/env python
#coding:utf8
import random,threading,timefrom queue import queue#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(10): #隨機產生10個數字 ,可以修改為任意大小 randomnum=random.randint(1,99) print
"%s: %s is producing %d to the queue!" % (time.ctime(), self.getname(), randomnum) self.data.put(randomnum) #將資料依次存入佇列 time.sleep(1) print
"%s: %s finished!" %(time.ctime(), self.getname())#consumer thread
class
consumer_even
(threading.thread):
def__init__
(self,t_name,queue): threading.thread.__init__(self,name=t_name) self.data=queue def
run(self):
while
1: try: val_even = self.data.get(1,5) #get(self, block=true, timeout=none) ,1就是阻塞等待,5是超時5秒
if val_even%2==0: print
"%s: %s is consuming. %d in the queue is consumed!" % (time.ctime(),self.getname(),val_even) time.sleep(2) else: self.data.put(val_even) time.sleep(2) except: #等待輸入,超過5秒 就報異常
print
"%s: %s finished!" %(time.ctime(),self.getname()) break
class
consumer_odd
(threading.thread):
def__init__
(self,t_name,queue): threading.thread.__init__(self, name=t_name) self.data=queue def
run(self):
while
1: try: val_odd = self.data.get(1,5) if val_odd%2!=0: print
"%s: %s is consuming. %d in the queue is consumed!" % (time.ctime(), self.getname(), val_odd) time.sleep(2) else: self.data.put(val_odd) time.sleep(2) except: print
"%s: %s finished!" % (time.ctime(), self.getname()) break
#main thread
defmain
(): queue = queue() producer = producer('pro.', queue) consumer_even = consumer_even('con_even.', queue) consumer_odd = consumer_odd('con_odd.',queue) producer.start() consumer_even.start() consumer_odd.start() producer.join() consumer_even.join() consumer_odd.join() print
'all threads terminate!'
if __name__ == '__main__': main()
給我老師的人工智慧教程打call!
python中的Queue模組
python queue模組的fifo佇列先進先出。class queue.queue maxsize lifo類似於堆,即先進後出。class queue.lifoqueue maxsize 還有一種是優先順序佇列級別越低越先出來。class queue.priorityqueue maxsize...
python中的queue模組簡介
queue模組用來實現訊息佇列功能,可以實現執行緒間安全的訊息交換。各個執行緒可以通過呼叫訊息佇列例項對訊息佇列進行操縱。該模組包含以下函式 1.queue.qsize 該函式返回訊息佇列的當前空間。2.queue.empty 該函式判斷訊息佇列是否為空,返回true或false。3.queue.f...
Python 佇列模組 Queue
佇列queue模組 管道 subprocess stdin stdout stderr 佇列 管道 鎖 佇列 先進先出 堆疊 先進後出 from multiprocessing import queue 建立乙個佇列 q queue 5 括號內可以傳數字 標示生成的佇列最大可以同時存放的資料量 往佇...