最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python Queue模塊詳解

 更新時間:2014年11月30日 21:51:23   投稿:mdxy-dxy  
這篇文章主要介紹了Python Queue模塊詳解,需要的朋友可以參考下

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

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

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

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

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

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

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

#!/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):  #隨機(jī)產(chǎn)生10個數(shù)字 ,可以修改為任意大小
      randomnum=random.randint(1,99)
      print "%s: %s is producing %d to the queue!" % (time.ctime(), self.getName(), randomnum)
      self.data.put(randomnum) #將數(shù)據(jù)依次存入隊(duì)列
      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秒 就報(bào)異常
        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()

相關(guān)文章

  • python實(shí)現(xiàn)爬取千萬淘寶商品的方法

    python實(shí)現(xiàn)爬取千萬淘寶商品的方法

    這篇文章主要介紹了python實(shí)現(xiàn)爬取千萬淘寶商品的方法,涉及Python頁面抓取的相關(guān)技巧,需要的朋友可以參考下
    2015-06-06
  • Python中查看文件名和文件路徑

    Python中查看文件名和文件路徑

    本篇文章主要介紹了Python中查看文件名和文件路徑的方法。具有很好的參考價值,下面跟著小編一起來看下吧
    2017-03-03
  • python集合的新增元素方法整理

    python集合的新增元素方法整理

    在本篇文章里小編給大家整理了一篇關(guān)于python集合的新增元素方法整理內(nèi)容,有需要的朋友們可以學(xué)習(xí)下。
    2020-12-12
  • Python腳本獲取操作系統(tǒng)版本信息

    Python腳本獲取操作系統(tǒng)版本信息

    本文給大家分享的小技巧是如何利用Python腳本獲取Windows和Linux的系統(tǒng)版本信息,非常的簡單實(shí)用,有需要的小伙伴可以查看下
    2016-12-12
  • 13個你可能未使用過的Python特性分享

    13個你可能未使用過的Python特性分享

    Python?是頂級編程語言之一,它具有許多程序員從未使用過的許多隱藏功能。在這篇博客中,將和大家分享一下你可能從未使用過的13?個?Python?特性,感興趣的可以學(xué)習(xí)一下
    2022-11-11
  • Python Request爬取seo.chinaz.com百度權(quán)重網(wǎng)站的查詢結(jié)果過程解析

    Python Request爬取seo.chinaz.com百度權(quán)重網(wǎng)站的查詢結(jié)果過程解析

    這篇文章主要介紹了Request爬取網(wǎng)站(seo.chinaz.com)百度權(quán)重的查詢結(jié)果過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-08-08
  • python+opencv實(shí)現(xiàn)車牌定位功能(實(shí)例代碼)

    python+opencv實(shí)現(xiàn)車牌定位功能(實(shí)例代碼)

    這篇文章主要介紹了python+opencv實(shí)現(xiàn)車牌定位功能,需要實(shí)現(xiàn)對給定的車牌進(jìn)行車牌識別,本文通過實(shí)例代碼講解,需要的朋友可以參考下
    2019-12-12
  • PyCharm上安裝Package的實(shí)現(xiàn)(以pandas為例)

    PyCharm上安裝Package的實(shí)現(xiàn)(以pandas為例)

    這篇文章主要介紹了PyCharm上安裝Package的實(shí)現(xiàn)(以pandas為例),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • python計(jì)算圓周率pi的方法

    python計(jì)算圓周率pi的方法

    這篇文章主要介紹了python計(jì)算圓周率pi的方法,涉及Python針對數(shù)學(xué)運(yùn)算的相關(guān)技巧,需要的朋友可以參考下
    2015-07-07
  • Python3 max()函數(shù)基礎(chǔ)用法

    Python3 max()函數(shù)基礎(chǔ)用法

    在本篇文章中我們給大家講述了關(guān)于Python3 max()函數(shù)的基本用法以及相關(guān)知識點(diǎn)內(nèi)容,需要的朋友們學(xué)習(xí)下。
    2019-02-02

最新評論

砀山县| 鸡泽县| 泸西县| 武鸣县| 湘乡市| 大安市| 砀山县| 务川| 侯马市| 平顶山市| 沧州市| 淮安市| 成武县| 阳东县| 会东县| 阳西县| 罗平县| 邵武市| 万宁市| 天峨县| 龙里县| 卫辉市| 调兵山市| 任丘市| 盐津县| 红原县| 南丹县| 平阴县| 高邮市| 塘沽区| 弥勒县| 永济市| 平果县| 北安市| 弥勒县| 磐安县| 察隅县| 额尔古纳市| 永清县| 永州市| 大化|