কম্পিউটার

পাইথনে অগ্রাধিকার সারি কীভাবে প্রয়োগ করবেন?


পরিচয়...

সারি মডিউল মাল্টি-থ্রেডেড প্রোগ্রামিংয়ের জন্য উপযুক্ত একটি ফার্স্ট-ইন, ফার্স্ট-আউট (FIFO), লাস্ট-ইন, ফার্স্ট আউট (LIFO) ডেটা কাঠামো প্রদান করে। সারিগুলি ডেটা বা যেকোনো বিস্তৃত তথ্য পাস করতে ব্যবহার করা যেতে পারে যেমন সেশনের বিশদ বিবরণ, পাথ, ভেরিয়েবল,... নির্মাতা এবং ভোক্তা থ্রেডের মধ্যে নিরাপদে। লকিং সাধারণত কলারের জন্য পরিচালনা করা হয়।

দ্রষ্টব্য :এই আলোচনা অনুমান করে আপনি ইতিমধ্যেই একটি সারির সাধারণ প্রকৃতি বুঝতে পেরেছেন৷ যদি আপনি না করেন, আপনি চালিয়ে যাওয়ার আগে কিছু রেফারেন্স পড়তে চাইতে পারেন।

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. উপরের উদাহরণটি দেখায় যে, অতি সম্প্রতি সারিতে রাখা গেট দ্বারা সরানো হয়েছে।

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() বলা হয়েছিল। প্রক্রিয়াকরণের ক্রম ব্যবসায়িক সমালোচনার উপর ভিত্তি করে নির্বিশেষে কোন ক্রম যুক্ত করা হয়েছে।


  1. পাইথনে থ্রেডের সাথে কনকারেন্সি কীভাবে প্রয়োগ করবেন?

  2. পাইথনে মাল্টিথ্রেডেড অগ্রাধিকার সারি

  3. পাইথনে strStr() প্রয়োগ করুন

  4. পাইথনে ব্যবহারকারী সংজ্ঞায়িত ব্যতিক্রম কীভাবে বাস্তবায়ন করবেন?