Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Python

पायथन में प्रायोरिटी क्यू कैसे इम्प्लीमेंट करें

परिचय

queue मॉड्यूल फर्स्ट-इन, फर्स्ट-आउट (FIFO), लास्ट-इन, फर्स्ट-आउट (LIFO) डेटा संरचना प्रदान करता है जो मल्टी-थ्रेडेड प्रोग्रामिंग के लिए उपयुक्त है। क्यू का उपयोग क्रिएटर और कंज्यूमर थ्रेड्स के बीच डेटा या सूचनाओं की विस्तृत श्रृंखला (जैसे सेशन डिटेल्स, पाथ्स, वेरिएबल्स) को सुरक्षित रूप से पास करने के लिए किया जा सकता है। लॉकिंग आमतौर पर कॉलर के लिए हैंडल की जाती है।

नोट: यह चर्चा मानती है कि आप पहले से ही क्यू की सामान्य प्रकृति को समझते हैं। यदि नहीं, तो आप जारी रखने से पहले कुछ संदर्भ पढ़ना चाह सकते हैं।

1. बेसिक FIFO क्यू इम्प्लीमेंट करें


import queue

fifo = queue.Queue()
# क्यू में नंबर डालें
for i in range(5):
    fifo.put(i)

# अगर खाली नहीं है तो क्यू से नंबर प्राप्त करें
print("Output")
while not fifo.empty():
    print(f" {fifo.get()} ")

आउटपुट: 0 1 2 3 4

2. बेसिक LIFO क्यू इम्प्लीमेंट करें


import queue

lifo = queue.LifoQueue()
for i in range(5):
    lifo.put(i)

print("Output")
while not lifo.empty():
    print(f" {lifo.get()} ")

आउटपुट: 4 3 2 1 0

3. प्रायोरिटी क्यू इम्प्लीमेंट करें

कभी-कभी क्यू में आइटम्स के प्रोसेसिंग ऑर्डर को उन आइटम्स की प्राथमिकता के आधार पर तय करने की आवश्यकता होती है, न कि केवल उस ऑर्डर के आधार पर जिसमें वे बनाए गए या क्यू में जोड़े गए। उदाहरण के लिए, प्रोडक्शन में चल रहा एक बिजनेस-क्रिटिकल जॉब को एक डेवलपर के प्रिंट जॉब पर हाईएस्ट CPU और प्रीसिडेंस की आवश्यकता होती है। PriorityQueue क्यू की सामग्री के सॉर्ट ऑर्डर का उपयोग करके तय करता है कि कौन सा आइटम प्राप्त करना है।


import queue
import threading

# प्राथमिकता और विवरण प्राप्त करने और प्राथमिकता को वैलिडेट करने के लिए क्लास
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

# प्रायोरिटी क्यू बनाएं और प्राथमिकता परिभाषित करें
q = queue.PriorityQueue()
q.put(Job(90, 'Developer-Print job'))
q.put(Job(2, 'Business-Report job'))
q.put(Job(1, 'Business-Critical Job'))

# जॉब प्रोसेस करें
def process_job(q):
    while True:
        next_job = q.get()
        print(f" *** Now, Processing the job - {next_job.description}")
        q.task_done()

# थ्रेड्स परिभाषित करें
workers = [
    threading.Thread(target=process_job, args=(q,)),
    threading.Thread(target=process_job, args=(q,)),
]

# थ्रेड्स कॉल करें और उन्हें जॉइन करें
for w in workers:
    w.setDaemon(True)
    w.start()

q.join()

आउटपुट:


New 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

इस उदाहरण में कई थ्रेड्स जॉब्स का उपभोग कर रहे हैं, जिन्हें क्यू में आइटम्स की प्राथमिकता के आधार पर प्रोसेस किया जाता है जब get() कॉल किया गया था। प्रोसेसिंग का ऑर्डर बिजनेस क्रिटिकैलिटी पर आधारित है, इस बात की परवाह किए बिना कि उन्हें किस क्रम में जोड़ा गया है।

  1. - पायथन में थ्रेड्स के साथ कनकरेंसी कैसे इम्प्लीमेंट करें

    परिचय पायथन में थ्रेड्स, सबप्रोसेसेज, जेनरेटर्स और अन्य ट्रिक्स का उपयोग करके कनकरेंट प्रोग्रामिंग के लिए अलग-अलग दृष्टिकोण हैं। थ्रेड्स इम्प्लीमेंट करने से पहले, आइए समझते हैं कि वास्तव में कनकरेंसी क्या है। कनकरेंसी एक प्रोग्राम के भीतर तर्क का एक टुकड़ा है जो निष्पादन के कई अलग-अलग पथ खोलने की अ

  1. - पायथन में strStr() लागू करें

    मान लीजिए हमारे पास दो स्ट्रिंग्स str और sub_str हैं। हमें str में sub_str की पहली घटना ढूंढनी है। यदि स्ट्रिंग str helloworld है, और उपस्ट्रिंग lo है, तो परिणाम 3 होगा। यह C में strstr() फंक्शन का उपयोग करके किया जा सकता है। हमें C में strstr() के समान एक और फंक्शन डिजाइन करना है। हल करने के चरण

  1. - पायथन में यूजर डिफाइंड एक्सेप्शन कैसे इम्प्लीमेंट करें?

    हम पायथन में एक नई एक्सेप्शन क्लास बनाकर यूजर-डिफाइंड या कस्टम एक्सेप्शन बनाते हैं। विचार कस्टम एक्सेप्शन क्लास को एक्सेप्शन क्लास से प्राप्त करना है। अधिकांश बिल्ट-इन एक्सेप्शन अपने एक्सेप्शन को लागू करने के लिए उसी विचार का उपयोग करते हैं। दिए गए कोड में, आपने एक यूजर-डिफाइंड एक्सेप्शन क्लास बनाई