1. 程式人生 > >Python3中queue模組的使用

Python3中queue模組的使用

直接跑程式碼,看結果,結果在最後

from queue import Queue
from queue import PriorityQueue
print("Queue類實現了一個基本的先進先出(FIFO)容器,使用put()將元素新增到序列尾端,get()從佇列尾部移除元素。\n")

q = Queue()

for i in range(3):
    q.put(i)

while not q.empty():
    print(q.get())

print("與標準FIFO實現Queue不同的是,LifoQueue使用後進先出序(會關聯一個棧資料結構)。\n")

from queue import LifoQueue

q1 = LifoQueue()

for i in range(3):
    q1.put(i)

while not q1.empty():
    print(q1.get())


print("除了按元素入列順序外,有時需要根據佇列中元素的特性來決定元素的處理順序。例如,老闆的列印任務可能比研發的列印任務優先順序更高。PriorityQueue依據佇列中內容的排序順序(sort order)來決定那個元素將被檢索。")


class Job(object):
    def __init__(self, priority, description):
        self.priority = priority
        self.description = description
        print('New job:', description)
        return

    def __lt__(self, other):
        return self.priority < other.priority

q2 = PriorityQueue()

q2.put(Job(5, 'Mid-level job'))
q2.put(Job(10, 'Low-level job'))
q2.put(Job(1, 'Important job')) #數字越小,優先順序越高

while not q2.empty():
    next_job = q2.get() #可根據優先順序取序列
    print('Processing job', next_job.description)

print(help(Queue))




以上程式碼輸出:

Queue類實現了一個基本的先進先出(FIFO)容器,使用put()將元素新增到序列尾端,get()從佇列尾部移除元素。

0 1 2 與標準FIFO實現Queue不同的是,LifoQueue使用後進先出序(會關聯一個棧資料結構)。

2 1 0 除了按元素入列順序外,有時需要根據佇列中元素的特性來決定元素的處理順序。例如,老闆的列印任務可能比研發的列印任務優先順序更高。PriorityQueue依據佇列中內容的排序順序(sort order)來決定那個元素將被檢索。 New job: Mid-level job New job: Low-level job New job: Important job Processing job Important job Processing job Mid-level job Processing job Low-level job

一下是類queue的系統解釋:

Help on class Queue in module queue:

class Queue(builtins.object)  |  Queue(maxsize=0)  |    |  Create a queue object with a given maximum size.  |    |  If maxsize is <= 0, the queue size is infinite.  |    |  Methods defined here:  |    |  __init__(self, maxsize=0)  |      Initialize self.  See help(type(self)) for accurate signature.  |    |  empty(self)  |      Return True if the queue is empty, False otherwise (not reliable!).  |        |      This method is likely to be removed at some point.  Use qsize() == 0  |      as a direct substitute, but be aware that either approach risks a race  |      condition where a queue can grow before the result of empty() or  |      qsize() can be used.  |        |      To create code that needs to wait for all queued tasks to be  |      completed, the preferred technique is to use the join() method.  |    |  full(self)  |      Return True if the queue is full, False otherwise (not reliable!).  |        |      This method is likely to be removed at some point.  Use qsize() >= n  |      as a direct substitute, but be aware that either approach risks a race  |      condition where a queue can shrink before the result of full() or  |      qsize() can be used.  |    |  get(self, block=True, timeout=None)  |      Remove and return an item from the queue.  |        |      If optional args 'block' is true and 'timeout' is None (the default),  |      block if necessary until an item is available. If 'timeout' is  |      a non-negative number, it blocks at most 'timeout' seconds and raises  |      the Empty exception if no item was available within that time.  |      Otherwise ('block' is false), return an item if one is immediately  |      available, else raise the Empty exception ('timeout' is ignored  |      in that case).  |    |  get_nowait(self)  |      Remove and return an item from the queue without blocking.  |        |      Only get an item if one is immediately available. Otherwise  |      raise the Empty exception.  |    |  join(self)  |      Blocks until all items in the Queue have been gotten and processed.  |        |      The count of unfinished tasks goes up whenever an item is added to the  |      queue. The count goes down whenever a consumer thread calls task_done()  |      to indicate the item was retrieved and all work on it is complete.  |        |      When the count of unfinished tasks drops to zero, join() unblocks.  |    |  put(self, item, block=True, timeout=None)  |      Put an item into the queue.  |        |      If optional args 'block' is true and 'timeout' is None (the default),  |      block if necessary until a free slot is available. If 'timeout' is  |      a non-negative number, it blocks at most 'timeout' seconds and raises  |      the Full exception if no free slot was available within that time.  |      Otherwise ('block' is false), put an item on the queue if a free slot  |      is immediately available, else raise the Full exception ('timeout'  |      is ignored in that case).  |    |  put_nowait(self, item)  |      Put an item into the queue without blocking.  |        |      Only enqueue the item if a free slot is immediately available.  |      Otherwise raise the Full exception.  |    |  qsize(self)  |      Return the approximate size of the queue (not reliable!).  |    |  task_done(self)  |      Indicate that a formerly enqueued task is complete.  |        |      Used by Queue consumer threads.  For each get() used to fetch a task,  |      a subsequent call to task_done() tells the queue that the processing  |      on the task is complete.  |        |      If a join() is currently blocking, it will resume when all items  |      have been processed (meaning that a task_done() call was received  |      for every item that had been put() into the queue).  |        |      Raises a ValueError if called more times than there were items  |      placed in the queue.  |    |  ----------------------------------------------------------------------  |  Data descriptors defined here:  |    |  __dict__  |      dictionary for instance variables (if defined)  |    |  __weakref__  |      list of weak references to the object (if defined)

None [Finished in 0.1s]

認識你是我們的緣分,同學,等等,記得關注我。

微信掃一掃 關注該公眾號