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

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

परिचय..

इस उदाहरण में, हम एक कार्य कतार बनाएंगे जिसमें निष्पादित किए जाने वाले सभी कार्य होंगे और एक थ्रेड पूल जो कतार के साथ अपने तत्वों को व्यक्तिगत रूप से संसाधित करने के लिए इंटरैक्ट करता है।

हम इस सवाल से शुरू करेंगे कि कतार क्या है? एक क्यू एक डेटा संरचना है जो एक बहुत ही विशिष्ट क्रम में बनाए गए विभिन्न तत्वों का संग्रह है। मुझे वास्तविक जीवन का उदाहरण लेते हुए समझाएं।

मान लें कि आप किराने की दुकान के काउंटर पर अपने किराना बिल का भुगतान करने के लिए कतार में खड़े हैं, (मुझसे कौन सी किराने की दुकान पूछें)

अपने बिलों का भुगतान करने की प्रतीक्षा कर रहे लोगों की कतार में, आप निम्नलिखित को नोटिस करेंगे:

1. लोग लाइन के एक छोर से प्रवेश करते हैं और दूसरे छोर से बाहर निकलते हैं।

2. यदि व्यक्ति A व्यक्ति B से पहले पंक्ति में प्रवेश करता है, तो व्यक्ति A व्यक्ति B से पहले पंक्ति को छोड़ देगा (जब तक कि व्यक्ति B एक प्रसिद्ध व्यक्ति नहीं है या उसकी प्राथमिकता अधिक है)।

3. एक बार जब सभी ने अपने बिलों का भुगतान कर दिया, तो लाइन में कोई नहीं बचेगा।

खैर, प्रोग्रामिंग पर वापस जाएं जहां एक क्यू एक समान तरीके से काम करता है।

1. एनक्यू - कतार के अंत में जोड़े गए तत्व।

2. dequeue - कतार की शुरुआत से हटाए गए तत्व।

और भी बहुत कुछ है, फर्स्ट इन फर्स्ट आउट (फीफो) - जो तत्व पहले जोड़े जाते हैं उन्हें पहले हटा दिया जाएगा। लास्ट इन फर्स्ट आउट (LIFO) - जोड़ा गया अंतिम तत्व पहले हटा दिया जाएगा।

पायथन कतार डेटा संरचना को कैसे कार्यान्वित करता है?

पायथन में कतार मॉड्यूल कतार डेटा संरचना का एक सरल कार्यान्वयन प्रदान करता है। प्रत्येक कतार में निम्नलिखित विधियाँ हो सकती हैं।

  • get ():अगला तत्व लौटाता है।

  • put():एक नया तत्व जोड़ता है।

  • qsize ():कतार में मौजूदा तत्वों की संख्या।

  • खाली ():एक बूलियन लौटाता है, यह दर्शाता है कि कतार खाली है या नहीं।

  • पूर्ण ():एक बूलियन लौटाता है, यह दर्शाता है कि कतार भरी हुई है या नहीं।

1. हम एक फ़ंक्शन बनाएंगे जो एक तर्क x लेता है, फिर गुणन करने के लिए 1 और स्वयं (x) के बीच की संख्याओं के माध्यम से पुनरावृत्त होता है। उदाहरण के लिए जब आप इस फ़ंक्शन में 5 पास करते हैं तो यह 1 से 5 तक पुनरावृत्त होता है और गुणा करता रहता है अर्थात 1 गुना 5, 2 गुना 5, 3 गुना 5, 4 गुना 5, 5 गुना 5 अंत में एक सूची के रूप में मान लौटाता है।

उदाहरण

def print_multiply(x):
output_value = []
for i in range(1, x + 1):
output_value.append(i * x)
print(f"Output \n *** The multiplication result for the {x} is - {output_value}")
print_multiply(5)

आउटपुट

*** The multiplication result for the 5 is - [5, 10, 15, 20, 25]

2. हम process_queue() नामक एक और फ़ंक्शन लिखेंगे जो कतार वस्तु के अगले तत्व को प्राप्त करने का प्रयास करेगा। इसके लिए तर्क काफी सरल है, तत्वों को तब तक पास करते रहें जब तक कि कतार खाली न हो जाए। मैं थोड़ा आगे बढ़ने में देरी करने के लिए नींद का उपयोग करूंगा।

उदाहरण

def process_queue():
while True:
try:
value = my_queue.get(block=False)
except queue.Empty:
return
else:
print_multiply(value)
time.sleep(2)

3. एक क्लास बनाएं, जब कोई नया इंस्टेंस इनिशियलाइज़ और शुरू होता है, तो process_queue() फंक्शन को कॉल किया जाएगा।

उदाहरण

class MultiThread(threading.Thread):
def __init__(self, name):
threading.Thread.__init__(self)
self.name = name

def run(self):
print(f" ** Starting the thread - {self.name}")
process_queue()
print(f" ** Completed the thread - {self.name}")

4. अंत में, हम संख्याओं की इनपुट सूची पास करेंगे और कतार भरेंगे।

# setting up variables
input_values = [5, 10, 15, 20]

# fill the queue
my_queue = queue.Queue()
for x in input_values:
my_queue.put(x)

5. अंत में, सभी को एक साथ रखकर।

import queue
import threading
import time

# Class
class MultiThread(threading.Thread):
def __init__(self, name):
threading.Thread.__init__(self)
self.name = name

def run(self):
print(f"Output \n ** Starting the thread - {self.name}")
process_queue()
print(f" ** Completed the thread - {self.name}")

# Process thr queue
def process_queue():
while True:
try:
value = my_queue.get(block=False)
except queue.Empty:
return
else:
print_multiply(value)
time.sleep(2)

# function to multiply
def print_multiply(x):
output_value = []
for i in range(1, x + 1):
output_value.append(i * x)
print(f" \n *** The multiplication result for the {x} is - {output_value}")

# Input variables
input_values = [2, 4, 6, 5,10,3]

# fill the queue
my_queue = queue.Queue()
for x in input_values:
my_queue.put(x)
# initializing and starting 3 threads
thread1 = MultiThread('First')
thread2 = MultiThread('Second')
thread3 = MultiThread('Third')
thread4 = MultiThread('Fourth')

# Start the threads
thread1.start()
thread2.start()
thread3.start()
thread4.start()

# Join the threads
thread1.join()
thread2.join()
thread3.join()
thread4.join()

आउटपुट

** Starting the thread - First
*** The multiplication result for the 2 is - [2, 4]

आउटपुट

** Starting the thread - Second
*** The multiplication result for the 4 is - [4, 8, 12, 16]

आउटपुट

** Starting the thread - Third
*** The multiplication result for the 6 is - [6, 12, 18, 24, 30, 36]

आउटपुट

** Starting the thread - Fourth
*** The multiplication result for the 5 is - [5, 10, 15, 20, 25]
*** The multiplication result for the 10 is - [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
*** The multiplication result for the 3 is - [3, 6, 9] ** Completed the thread - Third
** Completed the thread - Fourth
** Completed the thread - Second ** Completed the thread - First

6. हमने कतार अवधारणा को सफलतापूर्वक लागू किया है। देखिए, हमारे पास 4 थ्रेड हैं लेकिन प्रोसेस करने के लिए 6 मान हैं, इसलिए जो भी कतार में सबसे पहले आएगा उसे निष्पादित किया जाएगा और अन्य लोग लाइन में होंगे और दूसरों के पूरा होने की प्रतीक्षा करेंगे।

यह एक वास्तविक जीवन के समान है, मान लें कि 3 काउंटर हैं लेकिन 10 लोग अपने बिलों का भुगतान करने की प्रतीक्षा कर रहे हैं, इसलिए 10 लोग 3 कतारों में होंगे और जिन्होंने बिलों का भुगतान पूरा कर लिया है, वे लाइन छोड़कर अगले व्यक्ति के लिए रास्ता बनाएंगे।

  1. बोकेह (पायथन) में छवियों के साथ कैसे काम करें?

    बोकेह में छवियों के साथ काम करने के लिए, image_url() . का उपयोग करें विधि और छवियों की एक सूची पास करें। कदम किसी फ़ाइल में सहेजे गए आउटपुट को उत्पन्न करने के लिए डिफ़ॉल्ट आउटपुट स्थिति को कॉन्फ़िगर करें जब :func:show कहा जाता है। प्लॉटिंग के लिए एक नया चित्र बनाएं। दिए गए URL से लोड की गई छवियों क

  1. पायथन के साथ माइक्रोसॉफ्ट वर्ड कैसे पढ़ें?

    परिचय... कोई अपराध नहीं, मुझे Microsoft शब्द पसंद नहीं है और न ही स्प्रेडशीट। डेटा इंजीनियरिंग विशेषज्ञ होने के नाते, मुझे अक्सर Microsoft Word में परीक्षकों से परीक्षा परिणाम प्राप्त होते हैं। साँस! वे स्क्रीन शॉट्स, लिंक, बड़े, बहुत बड़े, बहुत बड़े पैराग्राफ को कैप्चर करने से लेकर वर्ड डॉक्यूमेंट

  1. पायथन के साथ एपीआई परिणामों की कल्पना कैसे करें

    परिचय.. एपीआई लिखने का एक सबसे बड़ा लाभ वर्तमान/लाइव डेटा निकालना है, भले ही डेटा तेजी से बदल रहा हो, एक एपीआई हमेशा अद्यतित डेटा प्राप्त करेगा। कुछ जानकारी का अनुरोध करने के लिए एपीआई प्रोग्राम बहुत विशिष्ट यूआरएल का उपयोग करेंगे उदा। Spotify या Youtube Music में 2020 के टॉप 100 सबसे ज्यादा बजाए ज