Язык программирования Python

Очередь


Процесс, показанный в предыдущем примере, имеет значение, достойное отдельного модуля. Такой модуль в стандартной библиотеке языка Python есть, и он называется Queue.

Помимо исключений - Queue.Full (очередь переполнена) и Queue.Empty (очередь пуста) - модуль определяет класс Queue, заведующий собственно очередью.

Собственно, здесь можно привести аналог примера выше, но уже с использованием класса Queue.Queue:

import threading, Queue

item = Queue.Queue()

def consume(): """Потребление очередного элемента (с ожиданием его появления)""" return item.get()

def consumer(): while True: print consume()

def produce(i): """Занесение нового элемента в контейнер и оповещение потоков""" item.put(i)

p1 = threading.Thread(target=consumer, name="t1") p1.setDaemon(True) p2 = threading.Thread(target=consumer, name="t2") p2.setDaemon(True) p1.start() p2.start() produce("ITEM1") produce("ITEM2") produce("ITEM3") produce("ITEM4") p1.join() p2.join()

Следует отметить, что все блокировки спрятаны в реализации очереди, поэтому в коде они явным образом не присутствуют.



Содержание раздела