notify() и notifyAll() другими потоками.Необязательный аргумент timeout 


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



ЗНАЕТЕ ЛИ ВЫ?

notify() и notifyAll() другими потоками.Необязательный аргумент timeout

Поиск

notify() и notifyAll() другими потоками.Необязательный аргумент timeout

 

задает таймаут ожидания в секундах.При выходе из ожидания поток снова запрашивает замок и возвращается из метода wait().

 

· notify()Выводит из режима ожидания один из потоков,ожидающих данные условия.Метод можно вызвать,только овладев замком,ассоциированным с условием.Документация предупреждает,что в будущих реализациях модуля из целей оптимизации этот метод будет прерывать ожидание сразу нескольких потоков.

 

Сам по себе метод notify() не приводит к продолжению выполнения ожидавших условия потоков,так как этому препятствует занятый замок.Потоки получают управление только после снятия замка потоком,вызвавшим метод notify().

 

· notifyAll()Этот метод аналогичен методу notify(),но прерывает ожидание всех ждущих выполнения условия потоков.

 

В следующем примере условия используются для оповещения потоков о прибытии новой порции данных(организуется связь производитель-потребитель, producer - consumer):

 

import threading

 

cv = threading.Condition()

 

class Item:

 

"""Класс-контейнер для элементов, которые будут потребляться в потоках"""

 

def __init__(self): self._items = []

 

def is_available(self): return len(self._items) > 0

def get(self):

return self._items.pop() def make(self, i):

 

self._items.append(i)

 

item = Item()

 

def consume():

 

"""Потребление очередного элемента (с ожиданием его появления)""" cv.acquire()

 

while not item.is_available(): cv.wait()

 

it = item.get() cv.release() return it

 

def consumer(): while True:

 



Поделиться:


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

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