queue

Синхронизированный класс очереди

Исходный код: Lib/queue.py

Модуль queue реализует очереди с несколькими производителями и потребителями. Это особенно полезно в многопоточном программировании, когда необходимо безопасно обмениваться информацией между несколькими потоками. Класс Queue в этом модуле реализует всю необходимую семантику блокировки.

В модуле реализованы три типа очередей, которые различаются только порядком получения записей. В очереди FIFO первые добавленные задачи извлекаются первыми. В очереди LIFO последняя добавленная запись извлекается первой (работает как стек). В очереди с приоритетом записи хранятся отсортированными (с использованием модуля heapq), и сначала извлекается запись с наименьшим значением.

Внутри эти три типа очередей используют блокировки для временной блокировки конкурирующих потоков; однако они не предназначены для обработки повторного входа в потоке.

Кроме того, модуль реализует «простой» тип очереди FIFO, SimpleQueue, конкретная реализация которого обеспечивает дополнительные гарантии в обмен на меньшую функциональность.

Модуль queue определяет следующие классы и исключения:

  • queue.Queue class - конструктор очереди FIFO

  • queue.LifoQueue class

  • queue.PriorityQueue class

  • queue.SimpleQueue class

  • queue.Empty exception - исключение в случае пустого объекта Queue

  • queue.Full exception

Объекты Queue

Queue объекты (Queue, LifoQueue или PriorityQueue) предоставляют общедоступные методы, описанные ниже.

  • Queue.qsize ()

  • Queue.empty ()

  • Queue.full ()

  • Queue.put () - помещает заданный объект в очередь

  • Queue.put_nowait ()

  • Queue.get () - извлекает объект из очереди

  • Queue.get_nowait ()

Предлагаются два метода для поддержки отслеживания того, были ли задачи, поставленные в очередь, полностью обработаны потоками-потребителями демона.

  • Queue.task_done ()

  • Queue.join ()

Объекты SimpleQueue

SimpleQueue объекты предоставляют общедоступные методы, описанные ниже.

  • SimpleQueue.qsize ()

  • SimpleQueue.empty ()

  • SimpleQueue.put ()

  • SimpleQueue.put_nowait ()

  • SimpleQueue.get ()

  • SimpleQueue.get_nowait ()

Смотрите также:

Класс multiprocessing.Queue - класс очереди для использования в контексте запуска множества процессов (а не многопоточности).

collections.deque - это альтернативная реализация неограниченных очередей с быстрыми атомарными операциями append () и popleft (), которые не требуют блокировки, а также поддерживают индексацию.

Last updated