@@ -23,8 +23,14 @@ the first retrieved (operating like a stack). With a priority queue,
2323the entries are kept sorted (using the :mod: `heapq ` module) and the
2424lowest valued entry is retrieved first.
2525
26- Internally, the module uses locks to temporarily block competing threads;
27- however, it is not designed to handle reentrancy within a thread.
26+ Internally, those three types of queues use locks to temporarily block
27+ competing threads; however, they are not designed to handle reentrancy
28+ within a thread.
29+
30+ In addition, the module implements a "simple"
31+ :abbr: `FIFO ( first-in, first-out ) ` queue type where
32+ specific implementations can provide additional guarantees
33+ in exchange for the smaller functionality.
2834
2935The :mod: `queue ` module defines the following classes and exceptions:
3036
@@ -67,6 +73,14 @@ The :mod:`queue` module defines the following classes and exceptions:
6773 priority: int
6874 item: Any=field(compare=False)
6975
76+ .. class :: SimpleQueue()
77+
78+ Constructor for an unbounded :abbr: `FIFO ( first-in, first-out ) ` queue.
79+ Simple queues lack advanced functionality such as task tracking.
80+
81+ .. versionadded :: 3.7
82+
83+
7084.. exception :: Empty
7185
7286 Exception raised when non-blocking :meth: `~Queue.get ` (or
@@ -201,6 +215,60 @@ Example of how to wait for enqueued tasks to be completed::
201215 t.join()
202216
203217
218+ SimpleQueue Objects
219+ -------------------
220+
221+ :class: `SimpleQueue ` objects provide the public methods described below.
222+
223+ .. method :: SimpleQueue.qsize()
224+
225+ Return the approximate size of the queue. Note, qsize() > 0 doesn't
226+ guarantee that a subsequent get() will not block.
227+
228+
229+ .. method :: SimpleQueue.empty()
230+
231+ Return ``True `` if the queue is empty, ``False `` otherwise. If empty()
232+ returns ``False `` it doesn't guarantee that a subsequent call to get()
233+ will not block.
234+
235+
236+ .. method :: SimpleQueue.put(item, block=True, timeout=None)
237+
238+ Put *item * into the queue. The method never blocks and always succeeds
239+ (except for potential low-level errors such as failure to allocate memory).
240+ The optional args *block * and *timeout * are ignored and only provided
241+ for compatibility with :meth: `Queue.put `.
242+
243+ .. impl-detail ::
244+ This method has a C implementation which is reentrant. That is, a
245+ ``put() `` or ``get() `` call can be interrupted by another ``put() ``
246+ call in the same thread without deadlocking or corrupting internal
247+ state inside the queue. This makes it appropriate for use in
248+ destructors such as ``__del__ `` methods or :mod: `weakref ` callbacks.
249+
250+
251+ .. method :: SimpleQueue.put_nowait(item)
252+
253+ Equivalent to ``put(item) ``, provided for compatibility with
254+ :meth: `Queue.put_nowait `.
255+
256+
257+ .. method :: SimpleQueue.get(block=True, timeout=None)
258+
259+ Remove and return an item from the queue. If optional args *block * is true and
260+ *timeout * is ``None `` (the default), block if necessary until an item is available.
261+ If *timeout * is a positive number, it blocks at most *timeout * seconds and
262+ raises the :exc: `Empty ` exception if no item was available within that time.
263+ Otherwise (*block * is false), return an item if one is immediately available,
264+ else raise the :exc: `Empty ` exception (*timeout * is ignored in that case).
265+
266+
267+ .. method :: SimpleQueue.get_nowait()
268+
269+ Equivalent to ``get(False) ``.
270+
271+
204272.. seealso ::
205273
206274 Class :class: `multiprocessing.Queue `
@@ -210,4 +278,3 @@ Example of how to wait for enqueued tasks to be completed::
210278 :class: `collections.deque ` is an alternative implementation of unbounded
211279 queues with fast atomic :meth: `~collections.deque.append ` and
212280 :meth: `~collections.deque.popleft ` operations that do not require locking.
213-
0 commit comments