Python 中的queue模組

2021-08-31 18:10:26 字數 3585 閱讀 9406

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!

作為標準庫中的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 括號內可以傳數字 標示生成的佇列最大可以同時存放的資料量 往佇...