from threading import BoundedSemaphore maxconnections = 5 


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



ЗНАЕТЕ ЛИ ВЫ?

from threading import BoundedSemaphore maxconnections = 5

Поиск

Семафоры

 

Семафоры(их иногда называют семафорами Дийкстры(Dijkstra)по имени их изобретателя)являются более общим механизмом синхронизации потоков,нежели замки.Семафоры могут допустить в критическую область программы сразу несколько потоков.Семафор имеет счетчик запросов,уменьшающийся с каждым вызовом метода acquire() и увеличивающийся при каждом вызове release().Счетчик не может стать меньше нуля,поэтому в таком состоянии потокам приходится ждать,как и в случае с замками,пока значение счетчика не увеличится.

 

Конструктор класса threading.Semaphore принимает в качестве(необязательного)аргумента начальное состояние счетчика(по умолчанию оно равно1,что соответствует замку класса Lock).Методы acquire() и release() действуют аналогично описанным выше одноименным методам у замков.

 

Семафор может применяться для охраны ограниченного ресурса.Например,с его помощью можно вести пул соединений с базой данных.Пример такого использования семафора(заимствован из документации к Python) дан ниже:


 


from threading import BoundedSemaphore maxconnections = 5

# Подготовка семафора

 

pool_sema = BoundedSemaphore(value=maxconnections)

 

# Внутри потока:

 

pool_sema.acquire() conn = connectdb()

# ... использование соединения ...

conn.close() pool_sema.release()

 

 

Таким образом,применяется не более пяти соединений с базой данных.В примере использован класс threading.BoundedSemaphore.Экземпляры этого класса отличаются от экземпляров класса threading.Semaphore тем,что не дают сделать release() больше,чем сделан acquire().

 



Поделиться:


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

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