মাল্টিপ্রসেসিং পাইথন প্রোগ্রামিংয়ের একটি জনপ্রিয় কৌশল যা আপনাকে একই সাথে একাধিক প্রসেস চালাতে দেয়, যার ফলে প্রায়শই পারফরম্যান্সের উন্নতি হয় এবং সিস্টেম রিসোর্স আরও দক্ষতার সাথে ব্যবহৃত হয়। এই আর্টিকেলে পাইথনের মাল্টিপ্রসেসিং লাইব্রেরির ব্যবহার নিয়ে বিস্তারিত আলোচনা করা হয়েছে, বিশেষ করে ম্যাপ (map) ফাংশনের উপর আলোকপাত করা হয়েছে। ম্যাপ ফাংশন আপনাকে একটি ইটারেবল (iterable), যেমন একটি লিস্টের, প্রতিটি আইটেমের উপর একটি ফাংশন প্রয়োগ করতে এবং ফলাফলসহ একটি নতুন লিস্ট রিটার্ন করতে দেয়। মাল্টিপ্রসেসিং ব্যবহার করে, আমরা আরও বেশি দক্ষতা এবং স্কেলেবিলিটির জন্য এই প্রক্রিয়াটিকে প্যারালাইজ (parallelize) করতে পারি।
এই নিবন্ধে, আমরা সেই সমস্যাটি অন্বেষণ করব যার জন্য মানচিত্র ফাংশন সহ মাল্টিপ্রসেসিং একটি চমৎকার সমাধান হতে পারে, প্রাসঙ্গিক লাইব্রেরি এবং ফাংশনগুলি নিয়ে আলোচনা করব, কোডের ধাপে ধাপে ব্যাখ্যা প্রদান করব এবং মেরুদণ্ডের উপর ভিত্তি করে তৈরি করা সম্পর্কিত বিষয়গুলিতে অনুসন্ধান করব। মাল্টিপ্রসেসিং এবং ম্যাপ ফাংশন।
মাল্টিপ্রসেসিং ম্যাপ: সমস্যা এবং সমাধান
আমরা যে সমস্যার সমাধান করতে চাই তা হল একটি বৃহৎ পুনরাবৃত্তিযোগ্য, যেমন একটি তালিকা, টিপল বা অন্য কোনো বস্তু যা পুনরাবৃত্তি সমর্থন করে এমন প্রতিটি আইটেমে একটি ফাংশন প্রয়োগ করার কর্মক্ষমতা এবং দক্ষতা উন্নত করা। এই ধরনের কাজের মুখোমুখি হলে, অন্তর্নির্মিত মানচিত্র ফাংশন বা তালিকা বোঝার ব্যবহার বেশ ধীর এবং অদক্ষ হতে পারে।
এর সমাধান হলো পাইথনের মাল্টিপ্রসেসিং লাইব্রেরি, বিশেষ করে Pool ক্লাস এবং এর map মেথড ব্যবহার করা। মাল্টিপ্রসেসিং-এর Pool.map() ফাংশনটি ব্যবহার করে আমরা আমাদের ফাংশনের এক্সিকিউশন একাধিক প্রসেসের মধ্যে ভাগ করে দিতে পারি।
কোডের ধাপে ধাপে ব্যাখ্যা
আসুন কোডটি ভেঙে ফেলি এবং ব্যাখ্যা করি কিভাবে মাল্টিপ্রসেসিং ম্যাপ ফাংশনটি কার্যকরভাবে ব্যবহার করা যায়:
import multiprocessing
import time
def square(n):
time.sleep(0.5)
return n * n
# Create the list of numbers
numbers = list(range(10))
# Initialize the multiprocessing Pool
pool = multiprocessing.Pool()
# Use the map function with multiple processes
squared_numbers = pool.map(square, numbers)
print(squared_numbers)
- প্রথমত, আমদানি করুন মাল্টিপ্রসেসিং মডিউল, যা পাইথনে সমান্তরাল প্রক্রিয়াকরণ ব্যবহার করার জন্য প্রয়োজনীয় সরঞ্জাম ধারণ করে।
- নামে একটি ফাংশন তৈরি করুন বর্গক্ষেত্র যেটি কেবল অর্ধেক সেকেন্ডের জন্য ঘুমায় এবং তারপর তার ইনপুট আর্গুমেন্টের বর্গ ফেরত দেয়। এই ফাংশনটি একটি গণনার অনুকরণ করে যা সম্পূর্ণ হতে একটি যুক্তিসঙ্গত পরিমাণ সময় নেয়।
- নামক একটি তালিকা তৈরি করুন সংখ্যার, যাতে 0 থেকে 9 পর্যন্ত পূর্ণসংখ্যা থাকে (অন্তর্ভুক্ত)।
- সূচনা a পুল মাল্টিপ্রসেসিং মডিউল থেকে বস্তু। পুল অবজেক্টটি কর্মী প্রক্রিয়াগুলি পরিচালনা করার একটি উপায় হিসাবে কাজ করে যা আপনি আপনার কাজগুলিকে সমান্তরাল করতে ব্যবহার করবেন।
- কল করুন মানচিত্র পুল বস্তুর উপর পদ্ধতি, এবং পাস বর্গক্ষেত্র ফাংশন এবং সংখ্যার তালিকা মানচিত্র পদ্ধতিটি তারপরে পুলে উপলব্ধ কর্মী প্রক্রিয়াগুলি ব্যবহার করে একযোগে সংখ্যা তালিকার প্রতিটি আইটেমের জন্য বর্গাকার ফাংশন প্রয়োগ করে।
- বর্গ_সংখ্যার ফলের তালিকা প্রিন্ট করুন, যাতে সংখ্যার তালিকা থেকে বর্গীয় মান থাকতে হবে।
পাইথন মাল্টিপ্রসেসিং লাইব্রেরি
পাইথন মাল্টিপ্রসেসিং লাইব্রেরি আপনার প্রোগ্রামে প্যারালেলিজম বাস্তবায়নের একটি সহজবোধ্য উপায় প্রদান করে। এটি Pool-এর মতো উচ্চ-স্তরের অ্যাবস্ট্রাকশন প্রদানের মাধ্যমে প্যারালাল প্রোগ্রামিংয়ের সাথে সাধারণত যুক্ত কিছু জটিলতাকে আড়াল করে । Pool ক্লাসটি একাধিক প্রসেসের মধ্যে কাজ বন্টনকে সহজ করে, যার ফলে ব্যবহারকারী ন্যূনতম ঝামেলায় প্যারালাল প্রসেসিংয়ের সুবিধাগুলো উপভোগ করতে পারেন।
Python Itertools মডিউল এবং সম্পর্কিত ফাংশন
যদিও মাল্টিপ্রসেসিং অনেক প্যারালাল টাস্কের জন্য একটি চমৎকার সমাধান, তবে এটি উল্লেখ্য যে পাইথন একই ধরনের চাহিদা মেটানোর জন্য অন্যান্য লাইব্রেরি এবং টুলও সরবরাহ করে। উদাহরণস্বরূপ, itertools মডিউলটি প্রচুর ফাংশন সরবরাহ করে যা ইটারেবলের উপর কাজ করে, প্রায়শই উন্নত দক্ষতার সাথে। imap() এবং imap_unordered() এর মতো কিছু itertools ফাংশন একটি ইটারেবলের উপর ফাংশন প্রয়োগ করার প্রক্রিয়াটিকে প্যারালাল করতে পারে। তবে, এটি মনে রাখা গুরুত্বপূর্ণ যে itertools প্রাথমিকভাবে ইটারেটর-ভিত্তিক সমাধানের উপর মনোযোগ দেয়, যেখানে মাল্টিপ্রসেসিং লাইব্রেরি প্যারালালিজমের জন্য একটি আরও ব্যাপক পদ্ধতি প্রদান করে, যা ম্যাপ-সদৃশ ফাংশনের বাইরেও অতিরিক্ত টুল এবং ক্ষমতা সরবরাহ করে।