亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Python Queue模塊詳細介紹及實例

系統 1777 0

Python Queue模塊

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()方法從隊頭刪除并返回一個項目。可選參數為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:utf8
import random,threading,time
from 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
def 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()


          


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 久久久久亚洲精品影视 | 国产日韩欧美一区 | 日本aⅴ在线不卡免费观看 日本aaaa | 久久精品亚洲热综合一本奇米 | 精品免费福利视频 | 日本一区二区视频免费播放 | 天天射天天操天天干 | 国产资源一区 | 亚洲悠悠色综合中文字幕 | 五月婷婷中文 | 国产黄mmd在线观看免费 | 亚洲综合伊人色一区 | 99热这里只有精品69 | 天天操天天摸天天射 | 毛片a级放荡的护士hd | 亚洲国产美女 | 9久re在线观看视频精品 | 免费播放欧美毛片欧美aaaaa | 日韩不卡在线观看 | 69成人做爰视频在线观看 | 最新中文字幕一区 | 国产精欧美一区二区三区 | 成人免费性视频 | www色中色| 欧美成人午夜影院 | 成熟热自由日本语亚洲人 | 国产一区二区三区精品视频 | 天天射久久 | 99久女女精品视频在线观看 | 99这里| 免费欧洲毛片a级视频老妇女 | 亚洲成在人线免费视频 | 日本精品视频 | 国产精品久久久久尤物 | 久久机热这里只有精品无需 | 九九视频在线观看视频23 | 欧美另类亚洲一区二区 | 毛色毛片免费看 | 午夜视频福利 | 亚洲精品国产综合99久久一区 | 国内精品不卡一区二区三区 |