Pythonin semaforiesimerkin suurin ongelma on, että se ei ole kovin tehokas.
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()
# Vapauta semafori
# Nosta semaforin arvoa yhdellä
sem.release()
tuo ketjutus – tämä rivi tuo ketjutusmoduulin, jonka avulla voit luoda säikeitä objekteina.
tuontiaika – tämä rivi tuo aikamoduulin, jonka avulla voit käyttää aikaan liittyviä toimintoja.
sem = threading.Semaphore(0) – tämä rivi luo semaforiobjektin, jonka alkuarvo on 0. Semafori on synkronointiobjekti, jota käytetään ohjaamaan pääsyä resurssiin.
sem.acquire() – tämä rivi yrittää hankkia semaforin, mikä tarkoittaa, että se estää, kunnes semaforin arvo on muu kuin nolla (eli se on käytettävissä).
sem.release() – tämä rivi vapauttaa semaforin, mikä tarkoittaa, että se lisää semaforin arvoa yhdellä (saamalla sen jälleen käyttöön).
viestittää
Semaphore on Python-kirjasto resurssien, kuten säikeiden ja tiedostojen, hallintaan. Se tarjoaa yksinkertaisen käyttöliittymän resurssien luomiseen ja hallintaan sekä erilaisia sovellusliittymiä näiden resurssien hallintaan. Semaforia voidaan käyttää säikeiden, prosessien, tiedostojen tai minkä tahansa muun tyyppisten resurssien luomiseen ja hallintaan.
Kuinka tehdä semafori
Semafori on tietorakenne, jota käytetään ohjaamaan resurssin samanaikaisten toimintojen määrää. Pythonissa semaforit on toteutettu objekteina, jotka voidaan luoda semaforimoduulin avulla. Jos haluat käyttää semaforia, luo ensin semaforiluokan esiintymä ja aseta sen arvo set()-menetelmällä. Tämän jälkeen voit käyttää get()-menetelmää semaforin nykyisen arvon hakemiseen.
Semaforin luomiseksi sinun on ensin tuotava semaforimoduuli:
tuonti semafori
Seuraavaksi sinun on luotava semaforiluokan esiintymä:
sem = semafori. Semafori()
Seuraavaksi voit asettaa semaforin arvon set()-menetelmällä:
sem.set(1)
Seuraavaksi voit käyttää get()-menetelmää semaforin nykyisen arvon hakemiseen: