python Queue模組

來源:互聯網
上載者:User

建立一個“隊列”對象

import Queue
myqueue = Queue.Queue(maxsize = 10)

Queue.Queue類即是一個隊列的同步實現。隊列長度可為無限或者有限。可通過Queue的建構函式的選擇性參數maxsize來設定隊列長度。如果maxsize小於1就表示隊列長度無限。

將一個值放入隊列中

myqueue.put(10)

調用隊列對象的put()方法在隊尾插入一個項目。put()有兩個參數,第一個item為必需的,為插入項目的值;第二個block為選擇性參數,預設為1。如果隊列當前為空白且block為1,put()方法就使調用線程暫停,直到空出一個資料單元。如果block為0,put方法將引發Full異常。

將一個值從隊列中取出

myqueue.get()

調用隊列對象的get()方法從隊頭刪除並返回一個項目。選擇性參數為block,預設為True。如果隊列為空白且block為True,get()就使調用線程暫停,直至有項目可用。如果隊列為空白且block為False,隊列將引發Empty異常。

python queue模組有三種隊列:
1、python queue模組的FIFO隊列先進先出。
2、LIFO類似於堆。即先進後出。
3、還有一種是優先順序隊列層級越低越先出來。 

針對這三種隊列分別有三個建構函式:
1、class Queue.Queue(maxsize) FIFO 
2、class Queue.LifoQueue(maxsize) LIFO 
3、class Queue.PriorityQueue(maxsize) 優先順序隊列 

介紹一下此包中的常用方法:

Queue.qsize() 返回隊列的大小 
Queue.empty() 如果隊列為空白,返回True,反之False 
Queue.full() 如果隊列滿了,返回True,反之False
Queue.full 與 maxsize 大小對應 
Queue.get([block[, timeout]]) 擷取隊列,timeout等待時間 
Queue.get_nowait() 相當Queue.get(False)
非阻塞 Queue.put(item) 寫入隊列,timeout等待時間 
Queue.put_nowait(item) 相當Queue.put(item, False)
Queue.task_done() 在完成一項工作之後,Queue.task_done() 函數向任務已經完成的隊列發送一個訊號

Queue.join() 實際上意味著等到隊列為空白,再執行別的操作

稍後補上自己的代碼例子

#!/usr/bin/env pythonimport Queue import threading import time import random   q=Queue.Queue(0) NUM_WORKERS = 3   class MyThread(threading.Thread):    """A worker thread."""     def __init__(self, input, worktype):        self._jobq = input         self._work_type = worktype         threading.Thread.__init__(self)     def run(self):        """         Get a job and process it.        Stop when there's no more jobs        """         while True:            if self._jobq.qsize()>0:                job = self._jobq.get()                 worktype=self._work_type                 self._process_job(job,worktype)             else:                break     def _process_job(self, job,worktype):        """         Do useful work here.        worktype: let this thread do different work        1,do list        2,do item        3,,,        """         doJob(job)   def doJob(job):    """     do work function 1    """     time.sleep(random.random()*3)     print "doing ",job if __name__=='__main__':       print "begin..."     #put some work to q    for i in range(NUM_WORKERS*2):        q.put(i)     #print total job q's size    print "job q'size",q.qsize()     #start threads to work    for x in range(NUM_WORKERS):        MyThread(q,x).start()     #if q is not empty, wait    #while q.qsize()>0:    #    time.sleep(0.1)
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.