पायथन में, स्टैक और कतार डेटा संरचनाओं को लागू करना बहुत आसान है। स्टैक को एलआईएफओ कहा जाता है क्योंकि स्टैक "लास्ट-इन, फर्स्ट-आउट" के सिद्धांत पर काम करता है और क्यू को फीफो कहा जाता है क्योंकि क्यू "फर्स्ट-इन, फर्स्ट-आउट" के सिद्धांत पर काम करता है, और पायथन में इनबिल्ट फ़ंक्शंस बनाते हैं कोड छोटा और सरल।
क्यूई मॉड्यूल बहु-उत्पादक, बहु-उपभोक्ता कतारों को लागू करता है और यह थ्रेडेड प्रोग्रामिंग में विशेष रूप से उपयोगी होता है जब कई थ्रेड्स के बीच सूचनाओं का सुरक्षित रूप से आदान-प्रदान किया जाना चाहिए। इस मॉड्यूल में कतार वर्ग सभी आवश्यक लॉकिंग सेमेन्टिक्स को लागू करता है और यह पायथन में थ्रेड समर्थन की उपलब्धता पर निर्भर करता है।
यह मॉड्यूल तीन प्रकार की कतार को लागू करता है, जो केवल उस क्रम में भिन्न होता है जिसमें प्रविष्टियां पुनर्प्राप्त की जाती हैं। FIFO कतार के लिए, जोड़े गए पहले कार्य पहले पुनर्प्राप्त किए गए हैं और LIFO कतार के लिए, सबसे हाल ही में जोड़ी गई प्रविष्टि पहली पुनर्प्राप्त (एक स्टैक की तरह काम कर रही है) है। और प्राथमिकता कतार के लिए, प्रविष्टियों को क्रमबद्ध रखा जाता है (heapq मॉड्यूल का उपयोग करके) और सबसे कम मूल्य वाली प्रविष्टि को पहले पुनर्प्राप्त किया जाता है।
यह कतार मॉड्यूल निम्नलिखित वर्गों और अपवादों को परिभाषित करता है।
कक्षा कतार। कतार (अधिकतम आकार =0)
यह एक फीफो कतार के लिए एक निर्माता है। Argument maxsize एक पूर्णांक है जो कतार में रखी जा सकने वाली वस्तुओं की संख्या पर ऊपरी सीमा सीमा निर्धारित करता है। एक बार इस आकार तक पहुँच जाने के बाद, कतार वस्तुओं का उपभोग होने तक सम्मिलन अवरुद्ध हो जाएगा। यदि अधिकतम आकार शून्य से कम या उसके बराबर है तो कतार का आकार अनंत होगा।
वर्ग Queue.LifoQueue(maxsize=0)
यह एक LIFO कतार के लिए निर्माता है। आर्गुमेंट मैक्ससाइज एक पूर्णांक है जो कतार में रखी जा सकने वाली वस्तुओं की संख्या पर ऊपरी सीमा निर्धारित करता है। एक बार इस आकार तक पहुँच जाने के बाद, कतार वस्तुओं का उपभोग होने तक सम्मिलन अवरुद्ध हो जाएगा। यदि अधिकतम आकार शून्य से कम या उसके बराबर है तो कतार का आकार अनंत होगा।
श्रेणी कतार। प्राथमिकता कतार (अधिकतम आकार =0)
यह प्राथमिकता कतार के लिए निर्माता है। आर्गुमेंट मैक्ससाइज एक पूर्णांक है जो कतार में रखी जा सकने वाली वस्तुओं की संख्या पर ऊपरी सीमा निर्धारित करता है। एक बार इस आकार तक पहुँच जाने के बाद, कतार वस्तुओं का उपभोग होने तक सम्मिलन अवरुद्ध हो जाएगा। यदि अधिकतम आकार शून्य से कम या उसके बराबर है तो कतार का आकार अनंत है।
अपवाद कतार। खाली
यह रेखा इंगित करती है कि जब गैर-अवरुद्ध get() (या get_nowait ()) को कतार ऑब्जेक्ट पर कॉल किया जाता है तो अपवाद उठाया जाता है जो खाली है।
अपवाद कतार।पूर्ण
यह रेखा इंगित करती है कि जब गैर-अवरुद्ध put() (या put_nowait ()) को एक कतार वस्तु पर बुलाया जाता है तो अपवाद उठाया जाता है।
कतार ऑब्जेक्ट
Queue.qsize()
यह फ़ंक्शन कतार का अनुमानित आकार लौटाता है।
कतार.खाली ()
यदि कतार खाली है तो यह फ़ंक्शन सही है अन्यथा गलत है। यदि खाली () रिटर्न सही है, तो यह गारंटी नहीं देता है कि बाद में कॉल () को ब्लॉक नहीं किया जाएगा। इसी तरह, यदि खाली () गलत लौटाता है, तो यह गारंटी नहीं देता है कि प्राप्त करने के लिए बाद की कॉल () ब्लॉक नहीं होगी।
कतार पूर्ण ()
यदि कतार भरी हुई है, तो सही है, अन्यथा गलत है। यदि पूर्ण () रिटर्न सही है, तो यह गारंटी नहीं देता है कि प्राप्त करने के लिए बाद की कॉल () ब्लॉक नहीं होगी। इसी तरह, यदि पूर्ण () गलत लौटाता है, तो यह गारंटी नहीं देता है कि बाद में कॉल करने के लिए () ब्लॉक नहीं होगा।
Queue.put(item[, block[, timeout]])
आइटम को कतार में रखें। यदि वैकल्पिक args ब्लॉक सत्य है और टाइमआउट कोई नहीं है (डिफ़ॉल्ट), यदि आवश्यक हो तो एक मुफ्त स्लॉट उपलब्ध होने तक ब्लॉक करें। यदि टाइमआउट एक सकारात्मक संख्या है, तो यह अधिकांश टाइमआउट सेकंड में ब्लॉक हो जाता है और यदि उस समय के भीतर कोई मुफ्त स्लॉट उपलब्ध नहीं होता है तो पूर्ण अपवाद उठाता है। अन्यथा (ब्लॉक गलत है), एक आइटम को कतार में रखें यदि एक मुफ्त स्लॉट तुरंत उपलब्ध है, अन्यथा पूर्ण अपवाद उठाएं (उस मामले में टाइमआउट को अनदेखा किया जाता है)।
Queue.get([block[, timeout]])
कतार से एक आइटम निकालें और वापस करें। यदि वैकल्पिक args ब्लॉक सत्य है और टाइमआउट कोई नहीं (डिफ़ॉल्ट) है, तो आवश्यक होने पर आइटम उपलब्ध होने तक ब्लॉक करें। यदि टाइमआउट एक सकारात्मक संख्या है, तो यह अधिकांश टाइमआउट सेकंड में ब्लॉक हो जाता है और यदि उस समय के भीतर कोई आइटम उपलब्ध नहीं होता है तो खाली अपवाद उठाता है। अन्यथा (ब्लॉक गलत है), यदि कोई आइटम तुरंत उपलब्ध हो तो उसे वापस कर दें, अन्यथा खाली अपवाद उठाएं (उस मामले में टाइमआउट को अनदेखा कर दिया जाता है)।
Queue.task_done()
इंगित करता है कि पूर्व में कतारबद्ध कार्य पूरा हो गया है। कतार उपभोक्ता धागे द्वारा उपयोग किया जाता है। किसी कार्य को लाने के लिए उपयोग किए जाने वाले प्रत्येक प्राप्त () के लिए, कार्य_डोन () के लिए एक बाद की कॉल कतार को बताती है कि कार्य पर प्रसंस्करण पूरा हो गया है।
यदि कोई शामिल () वर्तमान में अवरुद्ध हो रहा है, तो सभी आइटम संसाधित होने पर यह फिर से शुरू हो जाएगा (जिसका अर्थ है कि प्रत्येक आइटम के लिए एक टास्क_डोन () कॉल प्राप्त हुआ था जिसे कतार में रखा गया था)।
कतार में रखे गए आइटम से अधिक बार कॉल करने पर ValueError बढ़ाता है।
Queue.join()
तब तक ब्लॉक करें जब तक कि कतार में सभी आइटम प्राप्त और संसाधित नहीं हो जाते।
जब भी कोई आइटम कतार में जोड़ा जाता है तो अधूरे कार्यों की गिनती बढ़ जाती है। जब भी कोई उपभोक्ता थ्रेड टास्क_डोन () को यह इंगित करने के लिए कॉल करता है कि आइटम पुनर्प्राप्त किया गया था और उस पर सभी काम पूरा हो गया है, तो गिनती कम हो जाती है। जब अधूरे कार्यों की संख्या शून्य हो जाती है, तो join() अनब्लॉक हो जाता है।
उदाहरण कोड
import queue #maximum capacity of queue is 20 Q = queue.Queue(maxsize=40) Q.put(50) Q.put(90) Q.put(10) Q.put(70) print(Q.get()) print(Q.get()) print(Q.get()) print(Q.get())
आउटपुट
50 90 10 70
अंडरफ्लो/ओवरफ्लो का उदाहरण
import queue Q = queue.Queue(maxsize=30) print(Q.qsize()) Q.put(50) Q.put(90) Q.put(10) Q.put(70) print("Full: ", Q.full()) Q.put(90) Q.put(100) print("Full: ", Q.full()) print(Q.get()) print(Q.get()) print(Q.get()) print("Empty: ", Q.empty()) print(Q.get()) print(Q.get()) print(Q.get()) print("Empty: ", Q.empty()) print("Full: ", Q.full())
आउटपुट
0 Full: False Full: False 50 90 10 Empty: False 70 90 100 Empty: True Full: False
स्टैक का उदाहरण3
import queue S = queue.LifoQueue(maxsize=10) # qsize() give the maxsize of # the Queue print(S.qsize()) S.put(50) S.put(90) S.put(10) S.put(70) S.put(90) S.put(10) print("Full: ", S.full()) print("Size: ", S.qsize()) # Data will be accessed in the # reverse order Reverse of that # of Queue print(S.get()) print(S.get()) print(S.get()) print(S.get()) print(S.get()) print("Empty: ", S.empty())
आउटपुट
0 Full: False Size: 6 10 90 70 10 90 Empty: False