目次
- 1 1. Mis on Python’i järjekord?
- 2 2. Järjekorra kasutamine Pythonis
- 3 3. queue mooduli ülevaade
- 4 4. FIFO järjekorra rakendamise meetod
- 5 5. Täiustatud järjekorra toimingud
- 6 6. Järjekorra erindite käitlemine
- 7 7. Pythoni mitme lõimiga järjekorra kasutamine
- 8 8. Piiratud järjekorra (Bounded Queue) kasutamine
- 9 9. Kokkuvõte
1. Mis on Python’i järjekord?
Järjekorra põhimõiste
Järjekord (Queue) on üks andmestruktuur, mis kasutab „FIFO (First In, First Out)“ lähenemist. See tähendab, et kõigepealt lisatud element töödeldakse kõigepealt välja võtmise järjekorras. See mehhanism on kasutusel arvutiteaduse ja programmeerimise paljudes valdkondades ning on andmete tõhusaks töötlemiseks hädavajalik tööriist. Näiteks kasutatakse järjekorda järgmistes olukordades.- Ülesannete ajastamine: Esmalt käivitatud ülesandeid täidetakse järjekorras.
- Puhverdamine: Voogedastuse andmeid hoitakse järjekorras teatud koguses ja töödeldakse järjest.
- Mitme lõimevaheline suhtlus: Kui mitu lõime töötlevad andmeid samaaegselt, saab järjekorda kasutada andmete järjekorra haldamiseks.
queue
moodul on võimas tööriist, mis võimaldab neid järjekorra operatsioone lihtsalt teha. See moodul sisaldabemist lukustamismehhanismi, et lõimede vahel saaks andmeid turvaliselt vahetada.2. Järjekorra kasutamine Pythonis
Järjekorra üldised kasutusviisid
Pythonis on palju olukordi, kus järjekorda kasutatakse. Eriti on järjekord kasulik järgmistes stsenaariumites.- Ülesannete ajastamine: Kui tuleb töödelda mitut ülesannet järjest, on see üks parimaid meetodeid. Näiteks, kui veebiserver saab suurt hulka päringuid, lisatakse need järjekorda järjestikku ja töödeldakse järjest, mis võimaldab ressursse tõhusalt kasutada.
- Andmete puhverdamine: Voogtöötluse ajal toimib see puhverina, mis hoiab andmeid ajutiselt, kuni töötlemine jõuab sammu. Näiteks on see kasulik videovoogude või reaalajas andmetöötluse puhul.
- Andmete jagamine mitme lõime vahel: Järjekorda saab kasutada tööriistana, mis võimaldab turvalist andmete vahetust erinevate lõimede vahel. Mitme lõimega programmides saab järjekorda kasutada ülesannete jaotamiseks lõimede vahel.

3. queue
mooduli ülevaade
Klasside kirjeldus
Pythoniqueue
moodulis on olemas kolm peamist klassi. Allpool tutvustame igaühe omadusi ja kasutamist.Queue
(FIFO järjekord)- Kõige põhilisem järjekord, kus esimesena lisatud element võetakse esimesena välja. Kasutab FIFO (First In, First Out) põhimõtet.
- Kasutusnäide:
import queue q = queue.Queue() q.put("task1") q.put("task2") print(q.get()) ## "task1" väljastatakse
LifoQueue
(LIFO järjekord)- Nagu virna, võetakse viimati lisatud element esimesena välja. Kasutab LIFO (Last In, First Out) põhimõtet.
- Kasutusnäide:
import queue q = queue.LifoQueue() q.put("task1") q.put("task2") print(q.get()) ## "task2" väljastatakse
PriorityQueue
(prioriteedijärjekord)- Elemendid võetakse välja prioriteedi alusel. Madalam väärtus tähendab kõrgemat prioriteeti.
- Kasutusnäide:
import queue q = queue.PriorityQueue() q.put((1, "task1")) q.put((3, "task3")) q.put((2, "task2")) print(q.get()) ## "(1, 'task1')" väljastatakse
4. FIFO järjekorra rakendamise meetod
Põhiline kasutamine
FIFO queue on kõige levinum järjekorra vorm.queue.Queue
kasutamisega saab seda lihtsalt rakendada. Allpool on näide FIFO järjekorra põhilistest toimingutest Pythonis.import queue
## FIFO järjekorra loomine
q = queue.Queue()
## Elemendi lisamine järjekorda
q.put("apple")
q.put("banana")
q.put("cherry")
## Elemendi väljavõtmine järjekorrast
while not q.empty():
print(q.get())
Sel koodis võetakse elemendid välja järjekorras "apple"
, "banana"
, "cherry"
ja igaüks kuvatakse. empty()
meetodit kasutatakse, kuni järjekord on tühi, korduvate protsesside tegemiseks.Tegelik kasutusnäide
Näiteks veebiserveri poolt saadud päringute töötlemisel lisatakse iga päring järjekorda ja töödeldakse neid järjest. Sellistes olukordades toimib FIFO järjekord tõhusalt.5. Täiustatud järjekorra toimingud
Järjekorra meetodid
Pythoniqueue
moodulis on palju mugavaid meetodeid, mis võimaldavad järjekorda tõhusalt hallata. Nende kasutamisega on võimalik teha keerukamaid toiminguid. Tutvustame mõnda peamist meetodit.qsize()
- Tagastab järjekorras olevate elementide arvu. Kasulik, et kontrollida, kas järjekord on tühi.
- Kasutusnäide:
q = queue.Queue() q.put("task1") print(q.qsize()) ## 1 väljastatakse
empty()
- Määrab, kas järjekord on tühi. Tagastab
True
võiFalse
. - Kasutusnäide:
q = queue.Queue() print(q.empty()) ## True väljastatakse
- Määrab, kas järjekord on tühi. Tagastab
full()
- Määrab, kas järjekord on täis. Kehtib, kui
maxsize
on määratud. - Kasutusnäide:
q = queue.Queue(maxsize=2) q.put("task1") q.put("task2") print(q.full()) ## True väljastatakse
- Määrab, kas järjekord on täis. Kehtib, kui
put(item)
- Lisab elemendi järjekorda. Vaikimisi on seatud
block=True
, mis võib põhjustada blokeerimise. Võimalik on määrata ka aegumine, et piirata operatsiooni. - Kasutusnäide:
q = queue.Queue() q.put("task1")
- Lisab elemendi järjekorda. Vaikimisi on seatud
get()
- Võtab elemendi järjekorrast. Kui elementi pole olemas ja
block=True
, ootab, kuni element lisatakse. - Kasutusnäide:
q = queue.Queue() q.put("task1") task = q.get() print(task) ## "task1" väljastatakse
- Võtab elemendi järjekorrast. Kui elementi pole olemas ja
6. Järjekorra erindite käitlemine
Järjekorra erindite käitlemine
queue
moodulis on olemas erandid, mis võimaldavad tõhusalt töödelda üksuste väljavõtmise ajal tekkivaid vigu. Sellega saab veateate korral käitumist õigesti hallata.queue.Full
- Tekib, kui järjekord on täis ja kutsutakse
put()
. - Erindite käitlemise näide:
try: q.put("task", block=False) except queue.Full: print("Järjekord on täis")
- Tekib, kui järjekord on täis ja kutsutakse
queue.Empty
- Tekib, kui järjekord on tühi ja kutsutakse
get()
. - Erindite käitlemise näide:
try: task = q.get(block=False) except queue.Empty: print("Järjekord on tühi")
- Tekib, kui järjekord on tühi ja kutsutakse

7. Pythoni mitme lõimiga järjekorra kasutamine
Mitme lõimiga ülesannete haldamine
Pythoniqueue
moodul on eriti kasulik mitme lõimiga keskkonnas. Järjekorra kasutamisega saab lõimede vahel turvaliselt andmeid jagada ja ülesandeid tõhusalt jaotada. Allpool on lihtne näide.import queue
import threading
## Järjekorra loomine
q = queue.Queue()
## Töötaja lõime defineerimine
def worker():
while True:
item = q.get()
print(f"Töötlemisel: {item}")
q.task_done()
## Lõime käivitamine
threading.Thread(target=worker, daemon=True).start()
## Ülesannete lisamine järjekorda
for item in range(5):
q.put(item)
## Ootamine, kuni kõik ülesanded on lõpetatud
q.join()
print("Kõik ülesanded on lõpetatud")
Selles programmis võtab mitu lõime samaaegselt ülesandeid järjekorrast, töötleb neid ja ootab, kuni kõik ülesanded on lõpetatud. Järjekorra kasutamisega saab vältida lõimedevahelist andmete konfliktide tekkimist ning teostada tõhusat paralleelset töötlemist.8. Piiratud järjekorra (Bounded Queue) kasutamine
Mis on piiratud järjekord?
Piiratud järjekord (Bounded Queue) on järjekord, millele on määratud maksimaalne maht. See tüüpi järjekord aitab vältida ressursside raiskamist teatud tingimustel. Näiteks veebiserveri puhul, mis töötleb suurt hulka päringuid, saab piirangu kehtestamisega vältida süsteemi ülekoormamist. Piiratud järjekorral on järgmised peamised funktsioonid.- Käitumine, kui elementi ei saa lisada Kui järjekord on täis ja proovite lisada uut elementi, käivitatakse järjekorra mahtu arvestav käitumine. Tavaliselt on kaks tüüpi käitumist.
- Uue elemendi tagasilükkamine:Kui järjekord on täis, ei võeta enam elemente vastu ning uue elemendi lisamine lükatakse tagasi.
- Vana elemendi ülekirjutamine:Eemaldatakse järjekorra vanim element ja sinna lisatakse uus element.
- Ressursside haldamine Piiratud järjekorda kasutatakse ressursside (mälu, CPU jne) tõhusaks haldamiseks. See aitab vältida ressursside raiskamist ja on kasulik ülesannete töötlemisel piiratud ulatuses.
Kasutusnäide
Allpool on näide piiratud järjekorra rakendamisest Pythonis.import queue
## Piiratud järjekorra loomine
q = queue.Queue(maxsize=3)
## Lisame järjekorda elemendi
q.put("task1")
q.put("task2")
q.put("task3")
## Kui proovime lisada veel elemente, tekib blokeering või erind
try:
q.put_nowait("task4")
except queue.Full:
print("Järjekord on täis")
Selles näites on järjekorra maksimaalne suurus seatud 3-ks ja neljanda elemendi lisamisel tekib queue.Full
erind. Nii on piiratud järjekord tõhus süsteemi ülekoormamise vältimiseks.
9. Kokkuvõte
Pythoniqueue
moodul võimaldab andmeid tõ hallata ning on väga kasulik tööriist mitmesugustes olukordades, nagu paralleeltöötlus ja lõimedevaheline suhtlus. Eriti võimaldab FIFO-queue, LIFO-queue ja prioriteetne järjekord paindlikku andmehaldust, mis sobib erinevate stsenaariumitega. Lisaks tugevdab erandite käitlemise ja piiratud järjekordade kasutuselevõtt veahaldust ja ressursside tõhusat haldamist. Kui kasutad Pythoni keerukate andmetöötluste jaoks, siis kindlasti kasuta neid funktsioone.