麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > Python > 正文

Python Queue模塊詳解

2020-02-23 06:17:17
字體:
來源:轉載
供稿:網友

Python中,隊列是線程間最常用的交換數據的形式。Queue模塊是提供隊列操作的模塊,雖然簡單易用,但是不小心的話,還是會出現一些意外。

創建一個“隊列”對象
import Queue
q = Queue.Queue(maxsize = 10)
Queue.Queue類即是一個隊列的同步實現。隊列長度可為無限或者有限??赏ㄟ^Queue的構造函數的可選參數maxsize來設定隊列長度。如果maxsize小于1就表示隊列長度無限。

將一個值放入隊列中
q.put(10)
調用隊列對象的put()方法在隊尾插入一個項目。put()有兩個參數,第一個item為必需的,為插入項目的值;第二個block為可選參數,默認為
1。如果隊列當前為空且block為1,put()方法就使調用線程暫停,直到空出一個數據單元。如果block為0,put方法將引發Full異常。

將一個值從隊列中取出
q.get()
調用隊列對象的get()方法從隊頭刪除并返回一個項目??蛇x參數為block,默認為True。如果隊列為空且block為True,get()就使調用線程暫停,直至有項目可用。如果隊列為空且block為False,隊列將引發Empty異常。

Python Queue模塊有三種隊列及構造函數:
1、Python Queue模塊的FIFO隊列先進先出。 class Queue.Queue(maxsize)
2、LIFO類似于堆,即先進后出。 class Queue.LifoQueue(maxsize)
3、還有一種是優先級隊列級別越低越先出來。 class Queue.PriorityQueue(maxsize)

此包中的常用方法(q = Queue.Queue()):
q.qsize() 返回隊列的大小
q.empty() 如果隊列為空,返回True,反之False
q.full() 如果隊列滿了,返回True,反之False
q.full 與 maxsize 大小對應
q.get([block[, timeout]]) 獲取隊列,timeout等待時間
q.get_nowait() 相當q.get(False)
非阻塞 q.put(item) 寫入隊列,timeout等待時間
q.put_nowait(item) 相當q.put(item, False)
q.task_done() 在完成一項工作之后,q.task_done() 函數向任務已經完成的隊列發送一個信號
q.join() 實際上意味著等到隊列為空,再執行別的操作

范例:
實現一個線程不斷生成一個隨機數到一個隊列中(考慮使用Queue這個模塊)
實現一個線程從上面的隊列里面不斷的取出奇數
實現另外一個線程從上面的隊列里面不斷取出偶數

#!/usr/bin/env python#coding:utf8import random,threading,timefrom Queue import Queue#Producer threadclass 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 threadclass 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())        breakclass 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 threaddef main():  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()            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 久久久久久久久久久久久久国产 | 久久久久国产成人精品亚洲午夜 | 久久国产精品91 | 黄色a级片免费观看 | 国产乱一区二区三区视频 | a视频在线看 | 黄色特级片黄色特级片 | 久久精品首页 | 国产免费看片 | h视频免费在线 | www.777含羞草 | 久久久在线 | 日本免费不卡一区二区 | 免费中文视频 | 欧美精品一区二区久久 | 狠狠干狠狠操 | 日本一区二区久久久 | 一区二区三区四区视频在线观看 | 成人在线免费视频播放 | 亚洲第一成网站 | 亚洲视频综合网 | 久久久婷婷一区二区三区不卡 | 国产精品999在线观看 | 精品国产一区二区三区久久久蜜月 | 日本免费不卡一区二区 | 羞羞视频免费网站男男 | 又黄又爽免费无遮挡在线观看 | 99ri在线| 26uuu成人人网图片 | 斗罗破苍穹在线观看免费完整观看 | 午夜视频大全 | 51色视频| 精品av在线播放 | 成人国产在线看 | 国产亚洲精品久久久久久久久久 | 国产欧美日韩视频在线观看 | 日韩999| 2019天天干夜夜操 | 一级黄色在线免费观看 | 久久99精品国产自在现线 | 国产乱淫av片免费观看 |