परिचय...
क्यू मॉड्यूल मल्टी-थ्रेडेड प्रोग्रामिंग के लिए उपयुक्त फर्स्ट-इन, फर्स्ट-आउट (फीफो), लास्ट-इन, फर्स्ट आउट (एलआईएफओ) डेटा संरचना प्रदान करता है। डेटा या किसी भी विस्तृत जानकारी को पास करने के लिए कतारों का उपयोग किया जा सकता है उदा। सत्र विवरण, पथ, चर, निर्माता और उपभोक्ता धागे के बीच सुरक्षित रूप से। आमतौर पर कॉल करने वाले के लिए लॉकिंग को संभाला जाता है।
नोट :यह चर्चा मानती है कि आप पहले से ही एक कतार की सामान्य प्रकृति को समझते हैं। यदि आप नहीं करते हैं, तो जारी रखने से पहले आप कुछ संदर्भ पढ़ना चाहेंगे।
1. आइए एक बुनियादी फीफो कतार लागू करें।
import queue fifo = queue.Queue() # put numbers into queue for i in range(5): fifo.put(i) # if not empty get the numbers from queue print(f"Ouput \n") while not fifo.empty(): print(f" {fifo.get()} ")
आउटपुट
0 1 2 3 4
2. उपरोक्त उदाहरण एकल धागे का उपयोग यह दिखाने के लिए करता है कि कतार से तत्वों को उसी क्रम में कैसे हटाया जाता है जिसमें उन्हें डाला जाता है।
3. आइए हम एक बुनियादी LIFO कतार लागू करें।
import queue lifo = queue.LifoQueue() # put numbers into queue for i in range(5): lifo.put(i) print(f"Ouput \n") # if not empty get the numbers from queue while not lifo.empty(): print(f" {lifo.get()} ")
आउटपुट
4 3 2 1 0
4. ऊपर दिए गए उदाहरण से पता चलता है कि हाल ही में कतार में डाला गया get द्वारा हटा दिया गया है।
5. अंत में, हम देखेंगे कि प्राथमिकता कतार को कैसे लागू किया जाए।
कभी-कभी कतार में वस्तुओं का प्रसंस्करण क्रम उन वस्तुओं की प्राथमिकता के आधार पर होना चाहिए, न कि केवल उस क्रम में जो वे बनाए जाते हैं या कतार में जोड़े जाते हैं। उदाहरण के लिए, उत्पाद में चल रहे एक व्यवसायिक महत्वपूर्ण कार्य के लिए उच्चतम सीपीयू की आवश्यकता होती है और एक प्रिंट कुछ नौकरी पर प्राथमिकता होती है जिसे एक डेवलपर प्रिंट करना चाहता है। प्रायोरिटी क्यू कतार की सामग्री के सॉर्ट क्रम का उपयोग यह तय करने के लिए करती है कि किस आइटम को पुनः प्राप्त करना है।
import queue import threading # Class to get the priority and description and validate the priority class Job: def __init__(self, priority, description): self.priority = priority self.description = description print('New job:', description) return def __eq__(self, other): try: return self.priority == other.priority except AttributeError: return NotImplemented def __lt__(self, other): try: return self.priority < other.priority except AttributeError: return NotImplemented # create a priority queue and define the priority q = queue.PriorityQueue() q.put(Job(90, 'Developer-Print job')) q.put(Job(2, 'Business-Report job')) q.put(Job(1, 'Business-Critical Job')) # process the job def process_job(q): while True: next_job = q.get() print(f" *** Now, Processing the job - {next_job.description}") q.task_done() # define the threads workers = [ threading.Thread(target=process_job, args=(q,)), threading.Thread(target=process_job, args=(q,)), ] # call the threads and join them. for w in workers: w.setDaemon(True) w.start() q.join()
आउटपुट
job: Developer-Print job New job: Business-Report job New job: Business-Critical Job
आउटपुट
*** Now, Processing the job - Business-Critical Job *** Now, Processing the job - Business-Report job *** Now, Processing the job - Developer-Print job
6. इस उदाहरण में नौकरियों का उपभोग करने वाले कई धागे हैं, जिन्हें समय पर कतार में वस्तुओं की प्राथमिकता के आधार पर संसाधित किया जाता है get() कहा जाता था। प्रसंस्करण का क्रम व्यवसाय की गंभीरता पर आधारित होता है, भले ही उन्हें किस क्रम में जोड़ा गया हो।