পাইথন মাল্টিপ্রসেসিং ফর-লুপ

Pa Ithana Maltiprasesim Phara Lupa



মাল্টিপ্রসেসিং মাল্টিথ্রেডিংয়ের সাথে তুলনীয়। যাইহোক, এটি পার্থক্য করে যে আমরা থ্রেডিংয়ের জন্য নিযুক্ত জিআইএল-এর কারণে এক মুহূর্তে শুধুমাত্র একটি থ্রেড কার্যকর করতে পারি। মাল্টিপ্রসেসিং হল বিভিন্ন CPU কোর জুড়ে ক্রমানুসারে ক্রিয়াকলাপ সম্পাদন করার প্রক্রিয়া। থ্রেড সমান্তরালভাবে পরিচালনা করা যাবে না। যাইহোক, মাল্টিপ্রসেসিং আমাদের প্রসেসগুলি স্থাপন করতে এবং বিভিন্ন CPU কোরে একই সাথে চালাতে দেয়। লুপ, যেমন ফর-লুপ, সর্বাধিক ব্যবহৃত স্ক্রিপ্টিং ভাষাগুলির মধ্যে একটি। একটি মানদণ্ড, যেমন একটি পূর্বনির্ধারিত পুনরাবৃত্তির সংখ্যা পৌঁছানো পর্যন্ত বিভিন্ন ডেটা ব্যবহার করে একই কাজ পুনরাবৃত্তি করুন। লুপ একে একে প্রতিটি পুনরাবৃত্তি সম্পন্ন করে।

উদাহরণ 1: পাইথন মাল্টিপ্রসেসিং মডিউলে ফর-লুপ ব্যবহার করা

এই উদাহরণে, আমরা for-loop এবং Python মাল্টিপ্রসেসিং মডিউল ক্লাস প্রক্রিয়া ব্যবহার করি। আমরা একটি খুব সোজা উদাহরণ দিয়ে শুরু করি যাতে আপনি দ্রুত বুঝতে পারেন কিভাবে পাইথন মাল্টিপ্রসেসিং ফর লুপ কাজ করে। একটি ইন্টারফেস ব্যবহার করে যা থ্রেডিং মডিউলের সাথে তুলনীয়, মাল্টিপ্রসেসিং প্রক্রিয়াগুলি তৈরি করে।







থ্রেডের পরিবর্তে সাব-প্রসেসগুলিকে কাজে লাগিয়ে, মাল্টিপ্রসেসিং প্যাকেজ স্থানীয় এবং দূরবর্তী উভয় সঙ্গতি প্রদান করে, এইভাবে গ্লোবাল ইন্টারপ্রেটার লক এড়িয়ে যায়। ক্রমাগত একটি অনুক্রমের মাধ্যমে পুনরাবৃত্তি করতে একটি ফর-লুপ ব্যবহার করুন, যা একটি স্ট্রিং অবজেক্ট বা একটি টিপল হতে পারে। এটি অন্যান্য প্রোগ্রামিং ভাষায় দেখা কীওয়ার্ডের মতো কম এবং অন্যান্য প্রোগ্রামিং ভাষায় পাওয়া একটি পুনরাবৃত্তি পদ্ধতির মতো কাজ করে। একটি নতুন মাল্টিপ্রসেসিং শুরু করার মাধ্যমে, আপনি একটি ফর-লুপ চালাতে পারেন যা একই সাথে একটি প্রক্রিয়া চালায়।



আসুন 'স্পাইডার' টুল ব্যবহার করে কোড এক্সিকিউশনের জন্য কোড প্রয়োগ করে শুরু করি। আমরা বিশ্বাস করি যে 'স্পাইডার' পাইথন চালানোর জন্যও সেরা। আমরা একটি মাল্টিপ্রসেসিং মডিউল প্রক্রিয়া আমদানি করি যে কোডটি চলছে। পাইথন ধারণার মাল্টিপ্রসেসিং একটি 'প্রসেস ক্লাস' নামে পরিচিত একটি নতুন পাইথন প্রক্রিয়া তৈরি করে, এটিকে কোড চালানোর একটি পদ্ধতি দেয় এবং প্যারেন্ট অ্যাপ্লিকেশনটিকে এক্সিকিউশন পরিচালনা করার একটি উপায় দেয়। প্রসেস ক্লাসে start() এবং join() পদ্ধতি রয়েছে, উভয়ই অত্যন্ত গুরুত্বপূর্ণ।



এর পরে, আমরা 'func' নামক একটি ব্যবহারকারী-সংজ্ঞায়িত ফাংশন সংজ্ঞায়িত করি। যেহেতু এটি একটি ব্যবহারকারী-সংজ্ঞায়িত ফাংশন, আমরা এটিকে আমাদের পছন্দের একটি নাম দিই। এই ফাংশনের মূল অংশের ভিতরে, আমরা একটি আর্গুমেন্ট এবং 'গণিত' মান হিসাবে 'বিষয়' ভেরিয়েবল পাস করি। এর পরে, আমরা 'প্রিন্ট()' ফাংশনটিকে কল করি, 'সাধারণ বিষয়ের নাম' এবং সেইসাথে এর 'বিষয়' আর্গুমেন্টটি পাস করে যার মান রয়েছে। তারপরে, নিম্নলিখিত ধাপে, আমরা “if name== _main_” ব্যবহার করি, যা আপনাকে কোডটি চালানো থেকে বাধা দেয় যখন ফাইলটি একটি মডিউল হিসাবে আমদানি করা হয় এবং শুধুমাত্র যখন বিষয়বস্তুটি স্ক্রিপ্ট হিসাবে কার্যকর করা হয় তখনই আপনাকে এটি করার অনুমতি দেয়৷





আপনি যে কন্ডিশন বিভাগটি দিয়ে শুরু করেন সেটিকে বেশিরভাগ ক্ষেত্রেই এমন বিষয়বস্তু প্রদানের জন্য একটি অবস্থান হিসাবে বিবেচনা করা যেতে পারে যেটি শুধুমাত্র তখনই কার্যকর করা উচিত যখন আপনার ফাইলটি একটি স্ক্রিপ্ট হিসাবে চলে। তারপর, আমরা আর্গুমেন্ট সাবজেক্ট ব্যবহার করি এবং এতে কিছু মান সঞ্চয় করি যা হল “বিজ্ঞান”, “ইংরেজি” এবং “কম্পিউটার”। তারপরে নিম্নলিখিত ধাপে প্রক্রিয়াটিকে 'process1[]' নাম দেওয়া হয়। তারপর, আমরা প্রক্রিয়ায় ফাংশন কল করতে 'process(target=func)' ব্যবহার করি। ফাংশন কল করার জন্য টার্গেট ব্যবহার করা হয় এবং আমরা এই প্রক্রিয়াটিকে 'P' ভেরিয়েবলে সংরক্ষণ করি।

এর পরে, আমরা 'অ্যাপেন্ড()' ফাংশনকে কল করার জন্য 'process1' ব্যবহার করি যা 'func' ফাংশনে থাকা তালিকার শেষে একটি আইটেম যুক্ত করে। যেহেতু প্রক্রিয়াটি 'P' ভেরিয়েবলে সংরক্ষিত আছে, তাই আমরা এই ফাংশনে 'P' কে এর আর্গুমেন্ট হিসাবে পাস করি। অবশেষে, আমরা প্রক্রিয়াটি শুরু করতে 'P' এর সাথে 'start()' ফাংশন ব্যবহার করি। এর পরে, আমরা 'বিষয়' আর্গুমেন্ট সরবরাহ করার সময় আবার পদ্ধতিটি চালাই এবং সাবজেক্টে 'ফর' ব্যবহার করি। তারপর, “process1” এবং “add()” পদ্ধতিটি আরও একবার ব্যবহার করে, আমরা প্রক্রিয়া শুরু করি। তারপর প্রক্রিয়াটি চলে এবং আউটপুট ফেরত দেওয়া হয়। তারপর প্রক্রিয়াটিকে 'join()' কৌশল ব্যবহার করে শেষ করতে বলা হয়। যে প্রক্রিয়াগুলি 'join()' পদ্ধতিকে কল করে না সেগুলি প্রস্থান হবে না। একটি গুরুত্বপূর্ণ বিষয় হল যে 'আর্গস' কীওয়ার্ড প্যারামিটারটি ব্যবহার করা আবশ্যক যদি আপনি প্রক্রিয়াটির মাধ্যমে কোনো আর্গুমেন্ট প্রদান করতে চান।




এখন, আপনি আউটপুটে দেখতে পাচ্ছেন যে স্টেটমেন্টটি প্রথমে 'গণিত' বিষয়ের মান পাস করে প্রদর্শিত হয় যা আমরা 'func' ফাংশনে পাস করি কারণ আমরা প্রথমে এটিকে 'প্রক্রিয়া' ফাংশন ব্যবহার করে কল করি। তারপর, আমরা 'অ্যাপেন্ড()' কমান্ডটি ব্যবহার করি যা আগে থেকেই তালিকায় ছিল যা শেষে যোগ করা হয়েছে। তারপর, 'বিজ্ঞান', 'কম্পিউটার', এবং 'ইংরেজি' উপস্থাপন করা হয়েছিল। কিন্তু, আপনি দেখতে পাচ্ছেন, মানগুলি সঠিক ক্রমানুসারে নেই। এর কারণ হল প্রক্রিয়াটি শেষ হওয়ার সাথে সাথে তারা তা করে এবং তাদের বার্তা রিপোর্ট করে।

উদাহরণ 2: অনুক্রমিক ফর-লুপের মাল্টিপ্রসেসিং সমান্তরাল ফর-লুপে রূপান্তর

এই উদাহরণে, মাল্টিপ্রসেসিং লুপ টাস্ক একটি সমান্তরাল ফর-লুপ টাস্কে রূপান্তরিত হওয়ার আগে ক্রমানুসারে চালানো হয়। আপনি একটি সংগ্রহ বা স্ট্রিং-এর মতো ক্রমগুলির মধ্য দিয়ে সাইকেল করতে পারেন যে ক্রমে সেগুলি ফর-লুপগুলি ব্যবহার করে হয়৷

এখন, কোড বাস্তবায়ন শুরু করা যাক। প্রথমত, আমরা সময় মডিউল থেকে 'ঘুম' আমদানি করি। টাইম মডিউলে 'sleep()' পদ্ধতি ব্যবহার করে, আপনি যতক্ষণ চান কলিং থ্রেডের কার্য সম্পাদন স্থগিত করতে পারেন। তারপর, আমরা র্যান্ডম মডিউল থেকে 'র্যান্ডম' ব্যবহার করি, 'func' নাম দিয়ে একটি ফাংশন সংজ্ঞায়িত করি এবং 'argu' কীওয়ার্ডটি পাস করি। তারপর, আমরা 'val' ব্যবহার করে একটি র্যান্ডম মান তৈরি করি এবং এটিকে 'র্যান্ডম' এ সেট করি। তারপর, আমরা 'sleep()' পদ্ধতি ব্যবহার করে অল্প সময়ের জন্য ব্লক করি এবং প্যারামিটার হিসাবে 'val' পাস করি। তারপর, একটি বার্তা প্রেরণ করার জন্য, আমরা 'প্রিন্ট()' পদ্ধতিটি চালাই, 'প্রস্তুত' শব্দগুলি এবং 'আর্গ' শব্দটি এর প্যারামিটার হিসাবে পাস করি, সেইসাথে 'তৈরি করা' এবং 'ভাল' ব্যবহার করে মান পাস করি।

অবশেষে, আমরা 'ফ্লাশ' ব্যবহার করি এবং এটিকে 'ট্রু' এ সেট করি। ব্যবহারকারী পাইথনের প্রিন্ট ফাংশনে ফ্লাশ বিকল্প ব্যবহার করে আউটপুট বাফার করবেন কি না তা সিদ্ধান্ত নিতে পারেন। এই প্যারামিটারের False এর ডিফল্ট মান নির্দেশ করে যে আউটপুটটি বাফার করা হবে না। আউটপুটটি সত্য হিসাবে সেট করলে একে অপরকে অনুসরণ করে লাইনের একটি সিরিজ হিসাবে প্রদর্শিত হয়। তারপরে, আমরা প্রবেশের পয়েন্টগুলি সুরক্ষিত করতে 'if name== main' ব্যবহার করি। এর পরে, আমরা কাজটি ক্রমানুসারে সম্পাদন করি। এখানে, আমরা রেঞ্জটিকে '10' এ সেট করেছি যার অর্থ হল 10টি পুনরাবৃত্তির পরে লুপ শেষ হয়। এর পরে, আমরা 'প্রিন্ট()' ফাংশনকে কল করি, এটিকে 'রেডি' ইনপুট স্টেটমেন্ট পাস করি এবং 'ফ্লাশ=ট্রু' বিকল্পটি ব্যবহার করি।


আপনি এখন দেখতে পাচ্ছেন যে যখন আমরা কোড এক্সিকিউট করি, লুপের ফলে ফাংশনটি '10' বার চালানো হয়। এটি 10 ​​বার পুনরাবৃত্তি করে, সূচক শূন্য থেকে শুরু হয় এবং সূচী নয়টিতে শেষ হয়। প্রতিটি বার্তায় একটি টাস্ক নম্বর থাকে যা একটি ফাংশন নম্বর যা আমরা একটি 'আর্গ' এবং একটি সৃষ্টি নম্বর হিসাবে পাস করি।


এই অনুক্রমিক লুপ এখন একটি মাল্টিপ্রসেসিং প্যারালাল ফর-লুপে রূপান্তরিত হচ্ছে। আমরা একই কোড ব্যবহার করি, কিন্তু আমরা মাল্টিপ্রসেসিংয়ের জন্য কিছু অতিরিক্ত লাইব্রেরি এবং ফাংশনে যাচ্ছি। অতএব, আমাদের অবশ্যই মাল্টিপ্রসেসিং থেকে প্রক্রিয়াটি আমদানি করতে হবে, যেমনটি আমরা আগে ব্যাখ্যা করেছি। এরপর, আমরা 'func' নামে একটি ফাংশন তৈরি করি এবং একটি র্যান্ডম নম্বর পেতে 'val=random' ব্যবহার করার আগে 'arg' কীওয়ার্ডটি পাস করি।

তারপরে, একটি বার্তা দেখানোর জন্য 'প্রিন্ট()' পদ্ধতি ব্যবহার করার পরে এবং 'ভাল' প্যারামিটার দেওয়ার পরে কিছুটা সময় বিলম্ব করার পরে, আমরা প্রবেশের পয়েন্টগুলি সুরক্ষিত করতে 'if name= main' ফাংশনটি ব্যবহার করি। এর পরে, আমরা একটি প্রক্রিয়া তৈরি করি এবং 'প্রক্রিয়া' ব্যবহার করে ফাংশনটিকে কল করি এবং 'target=func' পাস করি। তারপর, আমরা “func”, “arg” পাস করি, “m” মান পাস করি এবং “10” রেঞ্জ পাস করি যার অর্থ লুপ “10” পুনরাবৃত্তির পরে ফাংশনটি বন্ধ করে দেয়। তারপর, আমরা 'প্রক্রিয়া' সহ 'start()' পদ্ধতি ব্যবহার করে প্রক্রিয়া শুরু করি। তারপরে, আমরা 'join()' পদ্ধতিকে বলি প্রসেসটি এক্সিকিকিউশনের জন্য অপেক্ষা করতে এবং পরে সমস্ত প্রসেস সম্পূর্ণ করার জন্য।


অতএব, যখন আমরা কোডটি কার্যকর করি, ফাংশনগুলি মূল প্রক্রিয়াটিকে কল করে এবং তাদের সম্পাদন শুরু করে। যাইহোক, সমস্ত কাজ সম্পন্ন না হওয়া পর্যন্ত তারা সম্পন্ন হয়। আমরা এটি দেখতে পাচ্ছি কারণ প্রতিটি কাজ একই সাথে সম্পাদিত হয়। এটি সমাপ্ত হওয়ার সাথে সাথে এটি তার বার্তা রিপোর্ট করে। এর মানে হল যদিও বার্তাগুলি ক্রমবর্ধমান নয়, সমস্ত '10' পুনরাবৃত্তি সম্পন্ন হওয়ার পরে লুপ শেষ হয়৷

উপসংহার

আমরা এই নিবন্ধে পাইথন মাল্টিপ্রসেসিং ফর-লুপ কভার করেছি। আমরা দুটি দৃষ্টান্তও উপস্থাপন করেছি। প্রথম চিত্রটি দেখায় কিভাবে পাইথনের লুপ মাল্টিপ্রসেসিং লাইব্রেরিতে একটি ফর-লুপ ব্যবহার করতে হয়। এবং দ্বিতীয় দৃষ্টান্তটি দেখায় কিভাবে একটি অনুক্রমিক ফর-লুপকে একটি সমান্তরাল মাল্টিপ্রসেসিং ফর-লুপে পরিবর্তন করতে হয়। পাইথন মাল্টিপ্রসেসিংয়ের জন্য স্ক্রিপ্ট তৈরি করার আগে, আমাদের অবশ্যই মাল্টিপ্রসেসিং মডিউল আমদানি করতে হবে।