কম্পিউটার

পাইথনের সাথে মাল্টিথ্রেডেড সারি কীভাবে বাস্তবায়ন করবেন


পরিচয়..

এই উদাহরণে, আমরা একটি টাস্ক সারি তৈরি করব যা কার্যকর করার জন্য সমস্ত কাজকে ধারণ করবে এবং একটি থ্রেড পুল তৈরি করব যা সারির সাথে তার উপাদানগুলিকে পৃথকভাবে প্রক্রিয়া করার জন্য ইন্টারঅ্যাক্ট করে৷

আমরা প্রশ্ন দিয়ে শুরু করব, সারি কী? একটি সারি হল একটি ডেটা কাঠামো যা একটি খুব নির্দিষ্ট ক্রমে বজায় রাখা বিভিন্ন উপাদানের একটি সংগ্রহ। আমাকে একটি বাস্তব জীবনের উদাহরণ দিয়ে ব্যাখ্যা করতে দিন।

ধরুন আপনি আপনার মুদির দোকানের কাউন্টারে আপনার মুদির দোকানের কাউন্টার দিতে লাইনে দাঁড়িয়েছেন, (আমাকে জিজ্ঞাসা করবেন না কোন মুদি দোকান)

তাদের বিল পরিশোধের জন্য অপেক্ষা করা লোকদের একটি লাইনে, আপনি নিম্নলিখিতগুলি লক্ষ্য করবেন:

1. লোকেরা লাইনের এক প্রান্তে প্রবেশ করে এবং অন্য প্রান্ত থেকে প্রস্থান করে।

2. যদি ব্যক্তি A ব্যক্তি B এর আগে লাইনে প্রবেশ করে তবে ব্যক্তি A ব্যক্তি B এর আগে লাইনটি ছেড়ে যাবে (যদি না ব্যক্তি B একজন সেলিব্রিটি হয় বা তার বেশি অগ্রাধিকার থাকে)।

3. একবার সবাই তাদের বিল পরিশোধ করলে, লাইনে কেউ থাকবে না।

ঠিক আছে, প্রোগ্রামিং-এ ফিরে যান যেখানে একটি সারি একইভাবে কাজ করে।

1. সারিবদ্ধ - সারির শেষে উপাদান যোগ করা হয়েছে।

2. dequeue - সারির শুরু থেকে উপাদানগুলি সরানো হয়েছে৷

আরও আছে, ফার্স্ট ইন ফার্স্ট আউট (ফিফো) - যে উপাদানগুলি প্রথমে যোগ করা হয়েছে তা প্রথমে সরানো হবে। লাস্ট ইন ফার্স্ট আউট (LIFO) - যোগ করা শেষ উপাদানটি প্রথমে সরানো হবে।

কিভাবে পাইথন সারি ডেটা কাঠামো বাস্তবায়ন করে?

পাইথনের সারি মডিউল সারি ডেটা কাঠামোর একটি সহজ বাস্তবায়ন প্রদান করে। প্রতিটি সারিতে নিম্নলিখিত পদ্ধতি থাকতে পারে।

  • get():পরবর্তী উপাদান প্রদান করে।

  • put():একটি নতুন উপাদান যোগ করে।

  • qsize():সারিতে বর্তমান উপাদানের সংখ্যা।

  • empty():একটি বুলিয়ান প্রদান করে, সারিটি খালি কিনা তা নির্দেশ করে।

  • full():একটি বুলিয়ান রিটার্ন করে, সারি পূর্ণ কিনা তা নির্দেশ করে।

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. একটি ক্লাস তৈরি করুন, যখন একটি নতুন ইন্সট্যান্স আরম্ভ করা হয় এবং শুরু করা হয়, প্রসেস_কিউ() ফাংশন বলা হবে।

উদাহরণ

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. বোকেহ (পাইথন) এর চিত্রগুলির সাথে কীভাবে কাজ করবেন?

  2. পাইথনে সারি কি? উদাহরণ সহ ব্যাখ্যা কর

  3. কিভাবে পাইথন দিয়ে মাইক্রোসফট ওয়ার্ড পড়তে হয়?

  4. পাইথনের সাথে API ফলাফলগুলি কীভাবে ভিজ্যুয়ালাইজ করবেন