| .. currentmodule:: asyncio |
| |
| Queues |
| ====== |
| |
| Queues: |
| |
| * :class:`Queue` |
| * :class:`PriorityQueue` |
| * :class:`LifoQueue` |
| |
| asyncio queue API was designed to be close to classes of the :mod:`queue` |
| module (:class:`~queue.Queue`, :class:`~queue.PriorityQueue`, |
| :class:`~queue.LifoQueue`), but it has no *timeout* parameter. The |
| :func:`asyncio.wait_for` function can be used to cancel a task after a timeout. |
| |
| Queue |
| ----- |
| |
| .. class:: Queue(maxsize=0, \*, loop=None) |
| |
| A queue, useful for coordinating producer and consumer coroutines. |
| |
| If *maxsize* is less than or equal to zero, the queue size is infinite. If |
| it is an integer greater than ``0``, then ``yield from put()`` will block |
| when the queue reaches *maxsize*, until an item is removed by :meth:`get`. |
| |
| Unlike the standard library :mod:`queue`, you can reliably know this Queue's |
| size with :meth:`qsize`, since your single-threaded asyncio application won't |
| be interrupted between calling :meth:`qsize` and doing an operation on the |
| Queue. |
| |
| This class is :ref:`not thread safe <asyncio-multithreading>`. |
| |
| .. versionchanged:: 3.4.4 |
| New :meth:`join` and :meth:`task_done` methods. |
| |
| .. method:: empty() |
| |
| Return ``True`` if the queue is empty, ``False`` otherwise. |
| |
| .. method:: full() |
| |
| Return ``True`` if there are :attr:`maxsize` items in the queue. |
| |
| .. note:: |
| |
| If the Queue was initialized with ``maxsize=0`` (the default), then |
| :meth:`full()` is never ``True``. |
| |
| .. coroutinemethod:: get() |
| |
| Remove and return an item from the queue. If queue is empty, wait until |
| an item is available. |
| |
| This method is a :ref:`coroutine <coroutine>`. |
| |
| .. seealso:: |
| |
| The :meth:`empty` method. |
| |
| .. method:: get_nowait() |
| |
| Remove and return an item from the queue. |
| |
| Return an item if one is immediately available, else raise |
| :exc:`QueueEmpty`. |
| |
| .. coroutinemethod:: join() |
| |
| Block 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 |
| :meth:`task_done` to indicate that the item was retrieved and all work on |
| it is complete. When the count of unfinished tasks drops to zero, |
| :meth:`join` unblocks. |
| |
| This method is a :ref:`coroutine <coroutine>`. |
| |
| .. versionadded:: 3.4.4 |
| |
| .. coroutinemethod:: put(item) |
| |
| Put an item into the queue. If the queue is full, wait until a free slot |
| is available before adding item. |
| |
| This method is a :ref:`coroutine <coroutine>`. |
| |
| .. seealso:: |
| |
| The :meth:`full` method. |
| |
| .. method:: put_nowait(item) |
| |
| Put an item into the queue without blocking. |
| |
| If no free slot is immediately available, raise :exc:`QueueFull`. |
| |
| .. method:: qsize() |
| |
| Number of items in the queue. |
| |
| .. method:: task_done() |
| |
| Indicate that a formerly enqueued task is complete. |
| |
| Used by queue consumers. For each :meth:`~Queue.get` used to fetch a task, a |
| subsequent call to :meth:`task_done` tells the queue that the processing |
| on the task is complete. |
| |
| If a :meth:`join` is currently blocking, it will resume when all items |
| have been processed (meaning that a :meth:`task_done` call was received |
| for every item that had been :meth:`~Queue.put` into the queue). |
| |
| Raises :exc:`ValueError` if called more times than there were items |
| placed in the queue. |
| |
| .. versionadded:: 3.4.4 |
| |
| .. attribute:: maxsize |
| |
| Number of items allowed in the queue. |
| |
| |
| PriorityQueue |
| ------------- |
| |
| .. class:: PriorityQueue |
| |
| A subclass of :class:`Queue`; retrieves entries in priority order (lowest |
| first). |
| |
| Entries are typically tuples of the form: (priority number, data). |
| |
| |
| LifoQueue |
| --------- |
| |
| .. class:: LifoQueue |
| |
| A subclass of :class:`Queue` that retrieves most recently added entries |
| first. |
| |
| |
| Exceptions |
| ^^^^^^^^^^ |
| |
| .. exception:: QueueEmpty |
| |
| Exception raised when the :meth:`~Queue.get_nowait` method is called on a |
| :class:`Queue` object which is empty. |
| |
| |
| .. exception:: QueueFull |
| |
| Exception raised when the :meth:`~Queue.put_nowait` method is called on a |
| :class:`Queue` object which is full. |