Python Queue: Your Go-To Tool for Job Management and Efficiency
Python queue - это структура данных, представляющая собой коллекцию объектов, управляемых по принципу "first in, first out" (FIFO), то есть первый элемент, добавленный в очередь, будет первым удаленным из нее.
Для работы с очередью в Python предусмотрены следующие классы:
1. Queue - класс, предоставляющий основной функционал для работы с очередью. Он содержит следующие методы:
- put(item) - добавляет элемент в очередь
- get() - удаляет и возвращает элемент из очереди
- qsize() - возвращает количество элементов в очереди
- empty() - проверяет, пуста ли очередь
- full() - проверяет, заполнена ли очередь
Пример использования Queue:
from queue import Queue
# создаем очередь
q = Queue()
# добавляем элементы в очередь
q.put('hello')
q.put(123)
q.put(True)
# получаем и удаляем элементы из очереди
print(q.get()) # 'hello'
print(q.get()) # 123
print(q.get()) # True
# проверяем, что очередь пуста
print(q.empty()) # True
2. LifoQueue - класс, предоставляющий функционал для работы с очередью по принципу "last in, first out" (LIFO), то есть последний добавленный элемент будет первым удаленным из очереди.
Пример использования LifoQueue:
from queue import LifoQueue
# создаем очередь LIFO
q = LifoQueue()
# добавляем элементы в очередь
q.put('hello')
q.put(123)
q.put(True)
# получаем и удаляем элементы из очереди
print(q.get()) # True
print(q.get()) # 123
print(q.get()) # 'hello'
# проверяем, что очередь пуста
print(q.empty()) # True
3. PriorityQueue - класс, который позволяет работать с очередью с приоритетами. Он хранит элементы в возрастающем порядке их приоритетов.
Пример использования PriorityQueue:
from queue import PriorityQueue
# создаем очередь с приоритетами
q = PriorityQueue()
# добавляем элементы с приоритетом
q.put((1, 'low'))
q.put((2, 'medium'))
q.put((3, 'high'))
# получаем и удаляем элементы из очереди
print(q.get()) # (1, 'low')
print(q.get()) # (2, 'medium')
print(q.get()) # (3, 'high')
# проверяем, что очередь пуста
print(q.empty()) # True
В Python очереди могут использоваться для решения различных задач, например:
- Очередь сообщений - при отправке сообщений в основной процесс из дочернего процесса
- Очередь задач - для планирования и выполнения задач в правильном порядке
- Очередь объектов - для управления пулом экземпляров классов в многопоточных приложениях
Пример использования очереди объектов для многопоточного приложения:
from queue import Queue
from threading import Thread
class Obj:
def __init__(self, value):
self.value = value
def worker(q):
while True:
obj = q.get()
print('Processing object with value:', obj.value)
q.task_done()
# создаем очередь объектов
q = Queue()
# создаем поток, который будет обрабатывать объекты из очереди
t = Thread(target=worker, args=(q,))
t.daemon = True
t.start()
# добавляем объекты в очередь
for i in range(5):
obj = Obj(i)
q.put(obj)
# ждем пока все объекты будут обработаны
q.join()