
Основният проблем с примера за семафор в Python е, че не е много ефективен.
import threading import time # A Semaphore is a synchronization object used # to control access to a resource. # Create a semaphore with initial value 0 sem = threading.Semaphore(0) # Try to acquire the semaphore # This will block until semaphore's value is non-zero sem.acquire()
# Освободете семафора
# Увеличаване на стойността на семафора с 1
sem.release()
импортиране на нишки – този ред импортира модула за нишки, който ви позволява да създавате нишки като обекти.
импортиране на време – този ред импортира модула за време, който ви позволява да използвате функции, свързани с времето.
sem = threading.Semaphore(0) – този ред създава Semaphore обект с начална стойност 0. Semaphore е обект за синхронизация, използван за контрол на достъпа до ресурс.
sem.acquire() – този ред се опитва да придобие семафора, което означава, че ще блокира, докато стойността на семафора не е нула (което означава, че е наличен).
sem.release() – този ред освобождава семафора, което означава, че увеличава стойността на семафора с 1 (правейки го отново достъпен).
семафор
Semaphore е библиотека на Python за управление на ресурси като нишки и файлове. Той предоставя прост интерфейс за създаване и управление на ресурси, както и разнообразие от API за контролиране на тези ресурси. Семафорът може да се използва за създаване и управление на нишки, процеси, файлове или всеки друг вид ресурс.
Как се прави семафор
Семафорът е структура от данни, използвана за контрол на броя на едновременните операции върху даден ресурс. В Python семафорите са имплементирани като обекти, които могат да бъдат създадени с помощта на модула семафор. За да използвате семафор, първо създавате екземпляр на класа семафор и след това задавате стойността му с помощта на метода set(). След това можете да използвате метода get(), за да извлечете текущата стойност на семафора.
За да създадете семафор, първо трябва да импортирате семафорния модул:
импортиране на семафор
След това трябва да създадете екземпляр на класа семафор:
sem = семафор.Семафор()
След това можете да зададете стойността на семафора, като използвате метода set():
sem.set(1)
След това можете да използвате метода get(), за да извлечете текущата стойност на семафора: