建立一個“隊列”對象
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() 實際上意味着等到隊列為空,再執行别的操作
附上一個例子:
#coding:utf-8
import threading
import time
import random
q = Queue.Queue(0) #當有多個線程共享一個東西的時候就可以用它了
NUM_WORKERS = 3
class MyThread(threading.Thread):
def __init__(self,input,worktype):
self._jobq = input
self._work_type = worktype
threading.Thread.__init__(self)
def run(self):
while True:
if self._jobq.qsize() > 0:
self._process_job(self._jobq.get(),self._work_type)
else:break
def _process_job(self, job, worktype):
doJob(job,worktype)
def doJob(job, worktype):
time.sleep(random.random() * 3)
print"doing",job," worktype ",worktype
if __name__ == '__main__':
print "begin...."
for i inrange(NUM_WORKERS * 2):
q.put(i) #放入到任務隊列中去
print "job qsize:",q.qsize()
for x inrange(NUM_WORKERS):
MyThread(q,x).start()
本文轉自Grodd51CTO部落格,原文連結:http://blog.51cto.com/juispan/1979275
,如需轉載請自行聯系原作者