目次
- 1 1. Ano ang queue sa Python?
- 2 2. Mga gamit ng queue sa Python
- 3 3. queue na module – pangkalahatang-ideya
- 4 4. Paraan ng Pag-implement ng FIFO Queue
- 5 5. Advanced Queue Operations
- 6 6. Pagproseso ng mga Exception sa Queue
- 7 7. Paggamit ng Queue sa Multi-threading ng Python
- 8 8. Paggamit ng Bounded Queue (Limitadong Queue)
- 9 9. Konklusyon
1. Ano ang queue sa Python?
Pangunahing konsepto ng queue
Ang queue (Queue) ay isang uri ng data structure na gumagamit ng tinatawag na paraan na “FIFO (First In, First Out)”. Ibig sabihin, ang mga elementong unang idinagdag ay unang kinukuha sa proseso. Ang mekanismong ito ay ginagamit sa maraming larangan ng computer science at programming, at ito ay isang mahalagang kasangkapan para sa epektibong pagproseso ng data. Halimbawa, ginagamit ang queue sa mga sumusunod na sitwasyon.- Pag-schedule ng mga gawain: Isinasagawa ang mga gawain ayon sa pagkakasunud-sunod ng kanilang pagsisimula.
- Buffering: Iniimbak ang stream data sa queue ng isang tiyak na dami, at pinoproseso ito nang sunud-sunod.
- Komunikasyon sa pagitan ng mga multi-thread: Kapag maraming thread ang sabay-sabay na nagpoproseso ng data, maaaring gamitin ang queue upang pamahalaan ang pagkakasunod-sunod ng data.
queue
module na ibinibigay ng standard library ng Python ay isang makapangyarihang kasangkapan na nagpapadali ng mga operasyon ng queue. Ang module na ito ay may internal na lock mechanism upang mapanatiling ligtas ang pagpapalitan ng data sa pagitan ng mga thread.2. Mga gamit ng queue sa Python
Karaniwang gamit ng queue
Maraming pagkakataon na gumagamit ng queue sa Python. Lalo na, nakakatulong ang queue sa mga sumusunod na senaryo.- Pag-iskedyul ng mga gawain: Isa ito sa mga pinakamainam na paraan kapag pinoproseso ang maraming gawain nang sunud-sunod. Halimbawa, kapag tumanggap ang web server ng maraming kahilingan, idinadagdag ang mga kahilingang ito sa queue nang sunud-sunod, at pinoproseso nang sunod-sunod upang magamit nang epektibo ang mga mapagkukunan.
- Pag-buffer ng data: Nagsisilbing buffer na pansamantalang nag-iimbak ng data habang nagpoproseso ng stream, hanggang makahabol ang pagproseso. Halimbawa, nakakatulong ito sa video streaming at real-time na pagproseso ng data.
- Pagbabahagi ng data sa pagitan ng mga thread: Ang queue ay maaaring magamit bilang tool para ligtas na magpalitan ng data sa pagitan ng iba’t ibang thread. Sa mga multi-thread na programa, maaaring gamitin ang queue upang mag-assign ng mga gawain sa pagitan ng mga thread.

3. queue
na module – pangkalahatang-ideya
Paglalarawan ng mga klase
Saqueue
na module ng Python, may tatlong pangunahing klase. Ipinapakita sa ibaba ang kanilang mga katangian at kung paano gamitin.Queue
(FIFO na pila)- Ito ang pinaka-pangunahing pila, kung saan ang unang idinagdag na item ay unang kinukuha. Gumagamit ng FIFO (First In, First Out) na paraan.
- Halimbawa ng paggamit:
import queue q = queue.Queue() q.put("task1") q.put("task2") print(q.get()) ## "task1" ay ilalabas
LifoQueue
(LIFO na pila)- Katulad ng stack, ang huling idinagdag na item ay unang kinukuha. Gumagamit ng LIFO (Last In, First Out) na paraan.
- Halimbawa ng paggamit:
import queue q = queue.LifoQueue() q.put("task1") q.put("task2") print(q.get()) ## "task2" ay ilalabas
PriorityQueue
(Pila na may prayoridad)- Kinukuha ang mga item batay sa prayoridad. Mas mababang halaga ay mas mataas na prayoridad.
- Halimbawa ng paggamit:
import queue q = queue.PriorityQueue() q.put((1, "task1")) q.put((3, "task3")) q.put((2, "task2")) print(q.get()) ## "(1, 'task1')" ay ilalabas
4. Paraan ng Pag-implement ng FIFO Queue
Pangunahing Paggamit
FIFO queue ay ang pinaka-karaniwang anyo ng queue.queue.Queue
sa pamamagitan ng paggamit, madaling maipapatupad. Narito ang isang pangunahing halimbawa ng operasyon ng FIFO queue sa Python.import queue
## Paglikha ng FIFO queue
q = queue.Queue()
## Magdagdag ng elemento sa queue
q.put("apple")
q.put("banana")
q.put("cherry")
## Kunin ang elemento mula sa queue
while not q.empty():
print(q.get())
Sa code na ito, kinukuha ang mga elemento sa pagkakasunod-sunod na "apple"
, "banana"
, "cherry"
, at bawat isa ay ipinapakita. Gamit ang empty()
method, inuulit ang proseso hanggang sa maging walang laman ang queue.Halimbawa ng Aktwal na Paggamit
Halimbawa, kapag pinoproseso ng web server ang mga natanggap na kahilingan, idinadagdag ang bawat kahilingan sa queue at pinoproseso ito nang sunud-sunod. Sa ganitong mga sitwasyon, epektibong gumagana ang FIFO queue.
5. Advanced Queue Operations
Mga Metodo ng Queue
Angqueue
module ng Python ay naglalaman ng maraming kapaki-pakinabang na mga metodo para sa epektibong pag-manipula ng queue. Sa paggamit nito, posible ang mas advanced na operasyon. Ilan sa mga pangunahing metodo ay ipapakita dito.qsize()
- Nagbabalik ng bilang ng mga elemento na naka-imbak sa queue. Kapaki-pakinabang para malaman kung ang queue ay walang laman.
- Halimbawa:
q = queue.Queue() q.put("task1") print(q.qsize()) ## Maglalabas ng 1
empty()
- Tinutukoy kung ang queue ay walang laman. Nagbabalik ng
True
oFalse
. - Halimbawa:
q = queue.Queue() print(q.empty()) ## Maglalabas ng True
- Tinutukoy kung ang queue ay walang laman. Nagbabalik ng
full()
- Tinutukoy kung ang queue ay puno. Epektibo kapag naka-set ang
maxsize
. - Halimbawa:
q = queue.Queue(maxsize=2) q.put("task1") q.put("task2") print(q.full()) ## Maglalabas ng True
- Tinutukoy kung ang queue ay puno. Epektibo kapag naka-set ang
put(item)
- Nagdadagdag ng item sa queue. Ang
block=True
ay default na nakatakda, at maaaring mag-block. Maaari ring magtakda ng timeout upang limitahan ang proseso. - Halimbawa:
q = queue.Queue() q.put("task1")
- Nagdadagdag ng item sa queue. Ang
get()
- Kinukuha ang item mula sa queue. Kung walang item, at
block=True
, maghihintay ito hanggang may maidagdag na item. - Halimbawa:
q = queue.Queue() q.put("task1") task = q.get() print(task) ## Maglalabas ng "task1"
- Kinukuha ang item mula sa queue. Kung walang item, at
6. Pagproseso ng mga Exception sa Queue
Exception Handling sa Queue
queue
module ay may mga exception na inihanda upang epektibong pangasiwaan ang mga error na nangyayari kapag kumukuha ng item. Sa ganitong paraan, maaaring maayos na i-handle ang pag-uugali kapag nagkakaroon ng error.queue.Full
- Nayayari kapag tinawag ang
put()
habang puno ang queue. - Halimbawa ng paghawak ng exception:
try: q.put("task", block=False) except queue.Full: print("Puno na ang queue")
- Nayayari kapag tinawag ang
queue.Empty
- Nayayari kapag tinawag ang
get()
habang walang laman ang queue. - Halimbawa ng paghawak ng exception:
try: task = q.get(block=False) except queue.Empty: print("Walang laman ang queue")
- Nayayari kapag tinawag ang

7. Paggamit ng Queue sa Multi-threading ng Python
Pamamahala ng mga Gawain sa Multi-threading
Angqueue
module ng Python ay lalo na kapaki-pakinabang sa kapaligiran ng multi-threading. Sa pamamagitan ng paggamit ng queue, maaaring ligtas na magbahagi ng data sa pagitan ng mga thread, at epektibong mag-assign ng mga gawain. Narito ang isang simpleng halimbawa.import queue
import threading
## Paglikha ng queue
q = queue.Queue()
## Pagdeklara ng worker thread
def worker():
while True:
item = q.get()
print(f"Pinoproseso: {item}")
q.task_done()
## Pagpapatakbo ng thread
threading.Thread(target=worker, daemon=True).start()
## Pagdaragdag ng mga gawain sa queue
for item in range(5):
q.put(item)
## Paghihintay sa pagkumpleto ng lahat ng gawain
q.join()
print("Natapos na ang lahat ng gawain")
Sa programang ito, maraming thread ang sabay-sabay na kumukuha ng mga gawain mula sa queue at pinoproseso ito, at naghihintay hanggang sa matapos ang lahat ng gawain. Sa pamamagitan ng paggamit ng queue, maiiwasan ang data race sa pagitan ng mga thread habang epektibong nagsasagawa ng parallel processing.8. Paggamit ng Bounded Queue (Limitadong Queue)
Ano ang Limitadong Queue?
Ang limitadong queue (Bounded Queue) ay isang queue na may nakatakdang maximum na kapasidad. Ang ganitong uri ng queue ay nakakatulong upang maiwasan ang pagsasayang ng mga mapagkukunan sa ilalim ng tiyak na mga kondisyon. Halimbawa, kapag ang isang web server ay nagpoproseso ng maraming kahilingan, ang paglalagay ng limitasyon ay makakaiwas sa sobrang pagkapuno ng sistema. May mga pangunahing tampok ang limitadong queue tulad ng mga sumusunod.- Pag-uugali kapag hindi na maaaring magdagdag ng item Kapag sinusubukang magdagdag ng bagong item habang puno na ang queue, isinasagawa ang aksyon batay sa kapasidad ng queue. Karaniwang dalawang pag-uugali ang sumusunod.
- Pagtanggi sa bagong item: Kapag puno na ang queue, hindi na ito tumatanggap ng karagdagang mga item, at tinatanggihan ang pagdaragdag ng bagong item.
- Pag-overwrite ng lumang item: Tinanggal ang pinakalumang item sa queue at pinapalitan ito ng bagong item.
- Pamahalaan ng mga mapagkukunan Ang limitadong queue ay ginagamit upang epektibong pamahalaan ang mga mapagkukunan (tulad ng memorya at CPU). Nakakatulong ito upang maiwasan ang pagsasayang ng mga mapagkukunan at magproseso ng mga gawain sa limitadong saklaw.
Halimbawa ng Paggamit
Narito ang isang halimbawa ng pag-implement ng limitadong queue gamit ang Python.import queue
## Lumikha ng limitadong queue
q = queue.Queue(maxsize=3)
## Magdagdag ng mga item sa queue
q.put("task1")
q.put("task2")
q.put("task3")
## Kapag sinusubukang magdagdag pa ng mga item, magbablock o magtataas ng exception
try:
q.put_nowait("task4")
except queue.Full:
print("Puno na ang queue")
Sa halimbawang ito, itinakda ang maximum na laki ng queue sa 3, at kapag sinusubukang magdagdag ng ika-apat na item, magtataas ng exception na queue.Full
. Sa ganitong paraan, epektibo ang limitadong queue sa pag-iwas sa sobrang pagkapuno ng sistema.
9. Konklusyon
Angqueue
module ng Python ay isang napaka-kapaki-pakinabang na kasangkapan para sa epektibong pamamahala ng data, pati na rin sa mga sitwasyon tulad ng parallel processing at komunikasyon sa pagitan ng mga thread. Lalo na, sa pamamagitan ng paggamit ng FIFO queue, LIFO queue, at priority queue, posible ang flexible na pamamahala ng data na kayang tumugon sa iba’t ibang senaryo. Bukod pa rito, sa pamamagitan ng pagpasok ng exception handling at bounded queue, mas pinapalakas ang error handling at epektibong pamamahala ng mga resources. Kapag gumagawa ng komplikadong pagproseso ng data sa Python, siguraduhing gamitin ang mga tampok na ito.