Язык программирования 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().

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