blob: 23739299f5e3081b36e41faae3bbfc35ff98493e [file] [log] [blame]
Alexandre Vassalottif260e442008-05-11 19:59:59 +00001:mod:`queue` --- A synchronized queue class
Georg Brandl116aa622007-08-15 14:28:22 +00002===========================================
3
Alexandre Vassalottif260e442008-05-11 19:59:59 +00004.. module:: queue
Georg Brandl116aa622007-08-15 14:28:22 +00005 :synopsis: A synchronized queue class.
6
7
Alexandre Vassalottif260e442008-05-11 19:59:59 +00008The :mod:`queue` module implements multi-producer, multi-consumer queues.
Thomas Wouters89d996e2007-09-08 17:39:28 +00009It is especially useful in threaded programming when information must be
Georg Brandl116aa622007-08-15 14:28:22 +000010exchanged safely between multiple threads. The :class:`Queue` class in this
11module implements all the required locking semantics. It depends on the
Thomas Wouters89d996e2007-09-08 17:39:28 +000012availability of thread support in Python; see the :mod:`threading`
13module.
Georg Brandl116aa622007-08-15 14:28:22 +000014
Raymond Hettinger35641462008-01-17 00:13:27 +000015Implements three types of queue whose only difference is the order that
16the entries are retrieved. In a FIFO queue, the first tasks added are
17the first retrieved. In a LIFO queue, the most recently added entry is
18the first retrieved (operating like a stack). With a priority queue,
19the entries are kept sorted (using the :mod:`heapq` module) and the
20lowest valued entry is retrieved first.
Georg Brandl116aa622007-08-15 14:28:22 +000021
Éric Araujo6e6cb8e2010-11-16 19:13:50 +000022
Alexandre Vassalottif260e442008-05-11 19:59:59 +000023The :mod:`queue` module defines the following classes and exceptions:
Georg Brandl116aa622007-08-15 14:28:22 +000024
Andrew M. Kuchling2b600e52010-02-26 13:35:56 +000025.. class:: Queue(maxsize=0)
Georg Brandl116aa622007-08-15 14:28:22 +000026
Raymond Hettinger35641462008-01-17 00:13:27 +000027 Constructor for a FIFO queue. *maxsize* is an integer that sets the upperbound
Georg Brandl116aa622007-08-15 14:28:22 +000028 limit on the number of items that can be placed in the queue. Insertion will
29 block once this size has been reached, until queue items are consumed. If
30 *maxsize* is less than or equal to zero, the queue size is infinite.
31
Andrew M. Kuchling2b600e52010-02-26 13:35:56 +000032.. class:: LifoQueue(maxsize=0)
Raymond Hettinger35641462008-01-17 00:13:27 +000033
34 Constructor for a LIFO queue. *maxsize* is an integer that sets the upperbound
35 limit on the number of items that can be placed in the queue. Insertion will
36 block once this size has been reached, until queue items are consumed. If
37 *maxsize* is less than or equal to zero, the queue size is infinite.
38
Christian Heimes679db4a2008-01-18 09:56:22 +000039
Andrew M. Kuchling2b600e52010-02-26 13:35:56 +000040.. class:: PriorityQueue(maxsize=0)
Raymond Hettinger35641462008-01-17 00:13:27 +000041
42 Constructor for a priority queue. *maxsize* is an integer that sets the upperbound
43 limit on the number of items that can be placed in the queue. Insertion will
44 block once this size has been reached, until queue items are consumed. If
45 *maxsize* is less than or equal to zero, the queue size is infinite.
46
47 The lowest valued entries are retrieved first (the lowest valued entry is the
48 one returned by ``sorted(list(entries))[0]``). A typical pattern for entries
49 is a tuple in the form: ``(priority_number, data)``.
Georg Brandl116aa622007-08-15 14:28:22 +000050
Christian Heimes679db4a2008-01-18 09:56:22 +000051
Georg Brandl116aa622007-08-15 14:28:22 +000052.. exception:: Empty
53
54 Exception raised when non-blocking :meth:`get` (or :meth:`get_nowait`) is called
55 on a :class:`Queue` object which is empty.
56
57
58.. exception:: Full
59
60 Exception raised when non-blocking :meth:`put` (or :meth:`put_nowait`) is called
61 on a :class:`Queue` object which is full.
62
63
64.. _queueobjects:
65
66Queue Objects
67-------------
68
Christian Heimes292d3512008-02-03 16:51:08 +000069Queue objects (:class:`Queue`, :class:`LifoQueue`, or :class:`PriorityQueue`)
Georg Brandl48310cd2009-01-03 21:18:54 +000070provide the public methods described below.
Georg Brandl116aa622007-08-15 14:28:22 +000071
72
73.. method:: Queue.qsize()
74
Guido van Rossum7736b5b2008-01-15 21:44:53 +000075 Return the approximate size of the queue. Note, qsize() > 0 doesn't
76 guarantee that a subsequent get() will not block, nor will qsize() < maxsize
77 guarantee that put() will not block.
Georg Brandl116aa622007-08-15 14:28:22 +000078
79
Raymond Hettinger47aa9892009-03-07 14:07:37 +000080.. method:: Queue.empty()
81
82 Return ``True`` if the queue is empty, ``False`` otherwise. If empty()
83 returns ``True`` it doesn't guarantee that a subsequent call to put()
84 will not block. Similarly, if empty() returns ``False`` it doesn't
85 guarantee that a subsequent call to get() will not block.
86
87
88.. method:: Queue.full()
89
90 Return ``True`` if the queue is full, ``False`` otherwise. If full()
91 returns ``True`` it doesn't guarantee that a subsequent call to get()
92 will not block. Similarly, if full() returns ``False`` it doesn't
93 guarantee that a subsequent call to put() will not block.
94
95
Georg Brandl18244152009-09-02 20:34:52 +000096.. method:: Queue.put(item, block=True, timeout=None)
Georg Brandl116aa622007-08-15 14:28:22 +000097
98 Put *item* into the queue. If optional args *block* is true and *timeout* is
99 None (the default), block if necessary until a free slot is available. If
100 *timeout* is a positive number, it blocks at most *timeout* seconds and raises
101 the :exc:`Full` exception if no free slot was available within that time.
102 Otherwise (*block* is false), put an item on the queue if a free slot is
103 immediately available, else raise the :exc:`Full` exception (*timeout* is
104 ignored in that case).
105
Georg Brandl116aa622007-08-15 14:28:22 +0000106
107.. method:: Queue.put_nowait(item)
108
109 Equivalent to ``put(item, False)``.
110
111
Georg Brandl18244152009-09-02 20:34:52 +0000112.. method:: Queue.get(block=True, timeout=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000113
114 Remove and return an item from the queue. If optional args *block* is true and
115 *timeout* is None (the default), block if necessary until an item is available.
116 If *timeout* is a positive number, it blocks at most *timeout* seconds and
117 raises the :exc:`Empty` exception if no item was available within that time.
118 Otherwise (*block* is false), return an item if one is immediately available,
119 else raise the :exc:`Empty` exception (*timeout* is ignored in that case).
120
Georg Brandl116aa622007-08-15 14:28:22 +0000121
122.. method:: Queue.get_nowait()
123
124 Equivalent to ``get(False)``.
125
126Two methods are offered to support tracking whether enqueued tasks have been
127fully processed by daemon consumer threads.
128
129
130.. method:: Queue.task_done()
131
132 Indicate that a formerly enqueued task is complete. Used by queue consumer
133 threads. For each :meth:`get` used to fetch a task, a subsequent call to
134 :meth:`task_done` tells the queue that the processing on the task is complete.
135
136 If a :meth:`join` is currently blocking, it will resume when all items have been
137 processed (meaning that a :meth:`task_done` call was received for every item
138 that had been :meth:`put` into the queue).
139
140 Raises a :exc:`ValueError` if called more times than there were items placed in
141 the queue.
142
Georg Brandl116aa622007-08-15 14:28:22 +0000143
144.. method:: Queue.join()
145
146 Blocks until all items in the queue have been gotten and processed.
147
148 The count of unfinished tasks goes up whenever an item is added to the queue.
149 The count goes down whenever a consumer thread calls :meth:`task_done` to
150 indicate that the item was retrieved and all work on it is complete. When the
Raymond Hettinger28c013d2009-03-10 00:07:25 +0000151 count of unfinished tasks drops to zero, :meth:`join` unblocks.
Georg Brandl116aa622007-08-15 14:28:22 +0000152
Georg Brandl116aa622007-08-15 14:28:22 +0000153
154Example of how to wait for enqueued tasks to be completed::
155
Georg Brandl48310cd2009-01-03 21:18:54 +0000156 def worker():
157 while True:
158 item = q.get()
159 do_work(item)
160 q.task_done()
Georg Brandl116aa622007-08-15 14:28:22 +0000161
Georg Brandl48310cd2009-01-03 21:18:54 +0000162 q = Queue()
163 for i in range(num_worker_threads):
Georg Brandl116aa622007-08-15 14:28:22 +0000164 t = Thread(target=worker)
Benjamin Petersone8fcbf62009-01-30 02:29:43 +0000165 t.daemon = True
Georg Brandl48310cd2009-01-03 21:18:54 +0000166 t.start()
Georg Brandl116aa622007-08-15 14:28:22 +0000167
168 for item in source():
Georg Brandl48310cd2009-01-03 21:18:54 +0000169 q.put(item)
Georg Brandl116aa622007-08-15 14:28:22 +0000170
171 q.join() # block until all tasks are done
172
Antoine Pitrou696efdd2011-01-07 19:16:12 +0000173
174.. seealso::
175
176 Class :class:`multiprocessing.Queue`
177 A queue class for use in a multi-processing (rather than multi-threading)
178 context.
179
Raymond Hettingerfc902132011-01-07 20:33:09 +0000180 :class:`collections.deque` is an alternative implementation of unbounded
181 queues with fast atomic :func:`append` and :func:`popleft` operations that
182 do not require locking.
183
Antoine Pitrou696efdd2011-01-07 19:16:12 +0000184 Latest version of the :source:`queue module Python source code
185 <Lib/queue.py>`