目次
1. Python को क्यू के हो?
क्यूको मूल अवधारणा
क्यू (Queue) डेटा संरचनाको एक प्रकार हो, जसले 「FIFO(First In, First Out)」 भनिने विधि अपनाउँछ। अर्थात, पहिलो थपिएको तत्व पहिलो निकालिने क्रममा प्रक्रिया हुन्छ। यो प्रणाली कम्प्युटर विज्ञान र प्रोग्रामिङका धेरै परिस्थितिहरूमा प्रयोग हुन्छ, र डेटा प्रभावकारी रूपमा प्रक्रिया गर्न आवश्यक उपकरण हो। उदाहरणका लागि, तलका जस्ता परिस्थितिहरूमा क्यू प्रयोग गरिन्छ।- टास्कको शेड्युलिङ: पहिले सुरु भएको टास्कलाई क्रमशः कार्यान्वयन गर्ने।
- बफरिङ: स्ट्रिम डेटा निश्चित मात्रामा क्यूमा सङ्ग्रह गरी क्रमशः प्रक्रिया गर्ने।
- मल्टिथ्रेड बीचको सञ्चार: धेरै थ्रेडहरू एकै समयमा डेटा प्रक्रिया गर्दा, क्यू प्रयोग गरेर डेटाको क्रम व्यवस्थापन गर्न सकिन्छ।
queue
मोड्युलले, यस्ता क्यू अपरेसनहरूलाई सजिलै गर्न सक्ने शक्तिशाली उपकरण हो। यो मोड्युलले, थ्रेडहरू बीच डेटा सुरक्षित रूपमा साटासाट गर्न सक्ने गरी, आन्तरिक रूपमा लक मेकानिज्म राखेको छ।2. Python मा क्यूको प्रयोग
क्यूको सामान्य प्रयोगहरू
Python मा क्यू प्रयोग गर्ने धेरै परिस्थितिहरू छन्। विशेष गरी, तलका परिदृश्यहरूमा क्यू उपयोगी हुन्छ।- टास्क शेड्युलिङ: धेरै टास्कहरूलाई क्रमशः प्रक्रिया गर्दा, यो उत्तम विधिहरूमध्ये एक हो। उदाहरणका लागि, वेब सर्भरले धेरै अनुरोधहरू प्राप्त गर्दा, ती अनुरोधहरूलाई क्यूमा क्रमशः थपेर, क्रमशः प्रक्रिया गरेर, स्रोतहरूलाई प्रभावकारी रूपमा प्रयोग गर्न सकिन्छ।
- डेटा बफरिङ: स्ट्रिम प्रोसेसिङ गर्दा डेटा अस्थायी रूपमा सङ्ग्रह गरेर, प्रोसेसिङले पक्रनु अघि पर्खनको लागि बफरको रूपमा काम गर्छ। उदाहरणका लागि, भिडियो स्ट्रिमिङ वा रियल‑टाइम डेटा प्रोसेसिङमा उपयोगी हुन्छ।
- मल्टिथ्रेड बीचको डेटा साझेदारी: क्यू विभिन्न थ्रेडहरू बीच सुरक्षित रूपमा डेटा साटासाट गर्नको लागि उपकरणको रूपमा प्रयोग गर्न सकिन्छ। मल्टिथ्रेड प्रोग्राममा, क्यू प्रयोग गरेर टास्कहरूलाई थ्रेडहरू बीच बाँड्न सकिन्छ।
3. queue
मोड्युलको अवलोकन
वर्गहरूको विवरण
Python कोqueue
मोड्युलमा, तीन मुख्य वर्गहरू उपलब्ध छन्। प्रत्येकको विशेषता र प्रयोग तरिका तल प्रस्तुत गरिएको छ।Queue
(FIFO क्यू)- सबैभन्दा आधारभूत क्यू हो, जसमा पहिले थपिएका वस्तुहरू पहिलो पटक निकालिन्छ। FIFO (First In, First Out) विधि अपनाइएको छ।
- उदाहरण प्रयोग:
import queue q = queue.Queue() q.put("task1") q.put("task2") print(q.get()) ## "task1" प्रिन्ट हुन्छ
LifoQueue
(LIFO क्यू)- स्ट्याक जस्तै, अन्तिममा थपिएका वस्तुहरू पहिलो पटक निकालिन्छ। LIFO (Last In, First Out) विधि अपनाइएको छ।
- उदाहरण प्रयोग:
import queue q = queue.LifoQueue() q.put("task1") q.put("task2") print(q.get()) ## "task2" प्रिन्ट हुन्छ
PriorityQueue
(प्राथमिकता क्यू)- प्राथमिकताका आधारमा वस्तुहरू निकालिन्छ। सानो मान उच्च प्राथमिकता मानिन्छ।
- उदाहरण प्रयोग:
import queue q = queue.PriorityQueue() q.put((1, "task1")) q.put((3, "task3")) q.put((2, "task2")) print(q.get()) ## "(1, 'task1')" प्रिन्ट हुन्छ
4. FIFO क्यूको कार्यान्वयन विधि
मूलभूत प्रयोग
FIFO क्यू सबैभन्दा सामान्य क्यू रूप हो।queue.Queue
प्रयोग गरेर सजिलै कार्यान्वयन गर्न सकिन्छ। तल Python मा FIFO क्यूको मूलभूत सञ्चालन उदाहरण छ।import queue
## FIFO क्यूको निर्माण
q = queue.Queue()
## क्यूमा तत्वहरू थप्नुहोस्
q.put("apple")
q.put("banana")
q.put("cherry")
## क्यूबाट तत्वहरू निकाल्नुहोस्
while not q.empty():
print(q.get())
यस कोडमा, "apple"
, "banana"
, "cherry"
को क्रममा तत्वहरू निकालिन्छ र प्रत्येक देखाइन्छ। empty()
मेथड प्रयोग गरेर, क्यू खाली नहुन्जेल दोहोर्याइ प्रक्रिया चलाइन्छ।व्यावहारिक प्रयोग उदाहरण
उदाहरणका लागि, वेब सर्भरले प्राप्त गरेको अनुरोधहरूलाई प्रक्रिया गर्दा, प्रत्येक अनुरोधलाई क्यूमा थपेर क्रमशः प्रक्रिया गर्ने तरिका हुन्छ। यस्तो परिस्थितिमा, FIFO क्यू प्रभावकारी रूपमा काम गर्छ।
5. उन्नत क्यू अपरेशनहरू
क्यूका मेथडहरू
Python कोqueue
मोड्युलमा क्यूलाई प्रभावकारी रूपमा सञ्चालन गर्नका लागि धेरै उपयोगी मेथडहरू उपलब्ध छन्। यीलाई प्रयोग गरेर, अझ उन्नत अपरेशनहरू सम्भव हुन्छन्। मुख्य मेथडहरू मध्ये केही प्रस्तुत गरिन्छ।qsize()
- क्यूमा संग्रहित तत्वहरूको संख्या फिर्ता गर्दछ। क्यू खाली छ कि छैन जाँच गर्न उपयोगी हुन्छ。
- उदाहरण:
q = queue.Queue() q.put("task1") print(q.qsize()) ## 1 प्रिन्ट हुन्छ
empty()
- क्यू खाली छ कि छैन निर्धारण गर्दछ।
True
वाFalse
फिर्ता हुन्छ。 - उदाहरण:
q = queue.Queue() print(q.empty()) ## True प्रिन्ट हुन्छ
- क्यू खाली छ कि छैन निर्धारण गर्दछ।
full()
- क्यू भरिएको छ कि छैन निर्धारण गर्दछ।
maxsize
सेट गरिएको भएमा यो मान्य हुन्छ。 - उदाहरण:
q = queue.Queue(maxsize=2) q.put("task1") q.put("task2") print(q.full()) ## True प्रिन्ट हुन्छ
- क्यू भरिएको छ कि छैन निर्धारण गर्दछ।
put(item)
- क्यूमा आइटम थप्दछ।
block=True
डिफल्ट रूपमा सेट गरिएको छ, जसले ब्लकिङ हुन सक्छ। टाइमआउट निर्दिष्ट गरेर प्रक्रिया सीमित गर्न पनि सम्भव छ。 - उदाहरण:
q = queue.Queue() q.put("task1")
- क्यूमा आइटम थप्दछ।
get()
- क्यूबाट आइटम निकाल्दछ। यदि आइटम उपलब्ध छैन भने,
block=True
अवस्थामा, आइटम थपिने सम्म पर्खन्छ。 - उदाहरण:
q = queue.Queue() q.put("task1") task = q.get() print(task) ## "task1" प्रिन्ट हुन्छ
- क्यूबाट आइटम निकाल्दछ। यदि आइटम उपलब्ध छैन भने,
6. क्यूमा अपवाद ह्यान्डलिंग
क्यूको अपवाद ह्यान्डलिंग
queue
मोड्युलमा, वस्तुहरू निकाल्दा उत्पन्न हुने त्रुटिहरूलाई प्रभावकारी रूपमा ह्यान्डल गर्नका लागि अपवादहरू उपलब्ध गराइएका छन्। यसले त्रुटि उत्पन्न हुँदा व्यवहारलाई उपयुक्त रूपमा ह्यान्डल गर्न मद्दत गर्दछ।queue.Full
- क्यू पूर्ण भएको अवस्थामा
put()
कल गर्दा यो उत्पन्न हुन्छ। - अपवाद ह्यान्डलिंग उदाहरण:
try: q.put("task", block=False) except queue.Full: print("क्यू पूर्ण छ")
- क्यू पूर्ण भएको अवस्थामा
queue.Empty
- क्यू खाली भएको अवस्थामा
get()
कल गर्दा यो उत्पन्न हुन्छ। - अपवाद ह्यान्डलिंग उदाहरण:
try: task = q.get(block=False) except queue.Empty:क्यू खाली छ")
- क्यू खाली भएको अवस्थामा
7. Python को मल्टिथ्रेडमा क्यूको प्रयोग
मल्टिथ्रेडमा कार्य व्यवस्थापन
Python कोqueue
मोड्युल मल्टिथ्रेड वातावरणमा विशेष गरी उपयोगी छ। क्यू प्रयोग गरेर थ्रेडहरू बीच सुरक्षित रूपमा डेटा साझा गर्न, कार्यहरूलाई प्रभावकारी रूपमा बाँड्न सकिन्छ। तल एक सरल उदाहरण देखाइएको छ।import queue
import threading
## क्यूको निर्माण
q = queue.Queue()
## कार्यकर्ता थ्रेडको परिभाषा
def worker():
while True:
item = q.get()
print(f"प्रक्रिया भइरहेको: {item}")
q.task_done()
## थ्रेड सुरु गर्नुहोस्
threading.Thread(target=worker, daemon=True).start()
## कार्यलाई क्यूमा थप्नुहोस्
for item in range(5):
q.put(item)
## सबै कार्यको समाप्तिको प्रतीक्षा
q.join()
print("सबै कार्यहरू समाप्त भए")
यस प्रोग्राममा, धेरै थ्रेडहरूले एकै समयमा क्यूबाट कार्य निकालेर प्रक्रिया गर्छन्, र सबै कार्य समाप्त नहुन्जेल प्रतीक्षा गर्छन्। क्यू प्रयोग गरेर थ्रेडहरू बीचको डेटा प्रतिस्पर्धा टाल्दै, प्रभावकारी रूपमा समानान्तर प्रक्रिया गर्न सम्भव हुन्छ।8. सीमित क्यू (Bounded Queue) को प्रयोग
सीमित क्यू भनेको के हो?
सीमित क्यू (Bounded Queue) भनेको अधिकतम क्षमता सेट गरिएको क्यू हो। यो प्रकारको क्यूले विशेष शर्तहरू अन्तर्गत स्रोतको दुरुपयोग रोक्न मद्दत गर्छ। उदाहरणका लागि, वेब सर्भरले धेरै अनुरोधहरू प्रक्रिया गर्दा, सीमा लगाएर प्रणालीको अत्यधिक लोडबाट बच्न सकिन्छ। सीमित क्यूमा तलका मुख्य कार्यहरू छन्।- आइटम थप्न नसकेको अवस्थामा कार्य क्यू भरिएर नयाँ आइटम थप्ने प्रयास गर्दा, क्यूको क्षमताअनुसार कार्य गरिन्छ। सामान्य कार्यहरू दुई प्रकारका छन्।
- नयाँ आइटमको अस्वीकृति: क्यू भरिएपछि, थप आइटम स्वीकार गरिँदैन, नयाँ आइटमको थप्ने प्रयास अस्वीकृत हुन्छ।
- पुरानो आइटमको अधिलेखन: क्यूको सबैभन्दा पुरानो आइटमलाई हटाएर, त्यहाँ नयाँ आइटम थपिन्छ।
- स्रोत व्यवस्थापन सीमित क्यूलाई स्रोत (मेमोरी, CPU आदि) लाई प्रभावकारी रूपमा व्यवस्थापन गर्न प्रयोग गरिन्छ। स्रोतको दुरुपयोग टाल्न, सीमित दायरामा कार्यहरू प्रक्रिया गर्न मद्दत गर्छ।
उदाहरण प्रयोग
तल सीमित क्यूलाई Python मा कार्यान्वयन गर्ने उदाहरण छ।import queue
## सीमित क्यू सिर्जना गर्नुहोस्
q = queue.Queue(maxsize=3)
## क्यूमा आइटम थप्नुहोस्
q.put("task1")
q.put("task2")
q.put("task3")
## थप आइटम थप्ने प्रयास गर्दा, ब्लक वा अपवाद उत्पन्न हुन्छ
try:
q.put_nowait("task4")
except queue.Full:
print("क्यू भरिएको छ")
यस उदाहरणमा, क्यूको अधिकतम आकार 3 सेट गरिएको छ, र चौथो आइटम थप्ने प्रयास गर्दा queue.Full
अपवाद उत्पन्न हुन्छ। यसरी सीमित क्यू प्रणालीलाई अत्यधिक लोडबाट बचाउन प्रभावकारी हुन्छ।9. निष्कर्ष
Python कोqueue
मोड्युलले डेटा प्रभावकारी रूपमा व्यवस्थापन गर्दछ, समानान्तर प्रक्रिया र थ्रेडहरू बीचको सञ्चार जस्ता विभिन्न परिस्थितिहरूमा अत्यन्त उपयोगी उपकरण हो। विशेष गरी, FIFO क्यू, LIFO क्यू, र प्राथमिकता क्यू प्रयोग गरेर विभिन्न परिदृश्यहरूलाई अनुकूलन गर्न सक्ने लचिलो डेटा व्यवस्थापन सम्भव हुन्छ। त्यसै गरी, अपवाद ह्यान्डलिंग र सीमित क्यूहरू परिचय गरेर त्रुटि ह्यान्डलिंग र स्रोतहरूको प्रभावकारी व्यवस्थापन अझ सुदृढ हुन्छ। Python मा जटिल डेटा प्रक्रिया गर्दा, कृपया यी सुविधाहरूलाई अवश्य प्रयोग गर्नुहोस्।