Glavni problem sa primjerom semafora u Pythonu je taj što nije vrlo efikasan.
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()
# Otpustite semafor
# Povećanje vrijednosti semafora za 1
sem.release()
import threading – ova linija uvozi modul za obradu niti koji vam omogućava da kreirate niti kao objekte.
import time – ova linija uvozi vremenski modul koji vam omogućava da koristite funkcije vezane za vrijeme.
sem = threading.Semaphore(0) – ova linija kreira Semaphore objekat sa početnom vrednošću 0. Semafor je objekat za sinhronizaciju koji se koristi za kontrolu pristupa resursu.
sem.acquire() – ova linija pokušava da preuzme semafor, što znači da će blokirati sve dok vrijednost semafora ne bude nula (što znači da je dostupan).
sem.release() – ova linija oslobađa semafor, što znači da povećava vrijednost semafora za 1 (čini ga ponovo dostupnim).
Semafor
Semafor je Python biblioteka za upravljanje resursima kao što su niti i datoteke. Pruža jednostavan interfejs za kreiranje i upravljanje resursima, kao i niz API-ja za kontrolu tih resursa. Semafor se može koristiti za kreiranje i upravljanje nitima, procesima, datotekama ili bilo kojom drugom vrstom resursa.
Kako napraviti semafor
Semafor je struktura podataka koja se koristi za kontrolu broja istovremenih operacija na resursu. U Pythonu semafori su implementirani kao objekti koji se mogu kreirati pomoću modula semafora. Da biste koristili semafor, prvo kreirate instancu klase semafora, a zatim postavite njenu vrijednost pomoću metode set(). Zatim možete koristiti metodu get() da dohvatite trenutnu vrijednost semafora.
Da biste kreirali semafor, prvo morate uvesti modul semafora:
import semafor
Zatim morate kreirati instancu klase semafora:
sem = semafor.Semafor()
Zatim možete postaviti vrijednost semafora pomoću metode set():
sem.set(1)
Zatim, možete koristiti metodu get() da dohvatite trenutnu vrijednost semafora: