quot;""Занесение нового элемента в контейнер и оповещение потоков""" 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

quot;""Занесение нового элемента в контейнер и оповещение потоков"""

Поиск

"""Занесение нового элемента в контейнер и оповещение потоков"""

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()

 

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

 

Модуль thread

 

По сравнению с модулем threading,модуль thread предоставляет низкоуровневый доступ к потокам.Многие функции модуля threading,который рассматривался до этого,


 


реализованы на базе модуля thread.Здесь стоит сделать некоторые замечания по

 

применению потоков вообще.Документация поPythonпредупреждает,что использование потоков имеет особенности:

 

· Исключение KeyboardInterrupt(прерывание от клавиатуры)может быть получено любым из потоков,если в поставкеPythonнет модуля signal(для обработки сигналов).

 

· Не все встроенные функции,блокированные ожиданием ввода,позволяют другим потокам работать.Правда,основные функции вроде time.sleep(),select.select(),метод read() файловых объектов не блокируют другие потоки.

· Невозможно прервать метод acquire(),так как исключение KeyboardInterrupt возбуждается только после возврата из этого метода.

 

· Нежелательно,чтобы главный поток завершался раньше других потоков,так как не

 

будут выполнены необходимые деструкторы и даже части finally в операторах try-finally.Это связано с тем,что почти все операционные системы завершают приложение,у которого завершился главный поток.

 



Поделиться:


Последнее изменение этой страницы: 2024-06-27; просмотров: 114; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.217.128 (0.007 с.)