পাইথন প্রোগ্রামিং জিরো টু হিরো: মেমোরি ম্যানেজমেন্ট, কনকারেন্সি ও প্রো টিপস (পার্ট ৪)

লিখেছেন: টিম Daily Tech News

ওয়েবসাইট: Dailynewsepaper26.site

ওয়েবসাইট (ব্যাকআপ): Dailynewsepaper26.blogspot.com

২২. পাইথন মেমোরি ম্যানেজমেন্ট (Under the Hood: Python Memory Management)

​আপনি যখন একটি ভেরিয়েবল তৈরি করেন, যেমন x = 10, পাইথন ব্যাকএন্ডে কীভাবে এটি হ্যান্ডেল করে? অন্যান্য ল্যাঙ্গুয়েজের (যেমন C বা C++) মতো পাইথনে ম্যানুয়ালি মেমোরি খালি করতে হয় না। পাইথন এটি নিজে নিজেই করে দুটি প্রধান মেকানিজমের মাধ্যমে: Reference Counting এবং Garbage Collection

বিঃদ্রঃ আপনি যদি পাইথনের বেসিক পার্টটি মিস করে      থাকেন, তবে ১ম পার্টটি এখান থেকে পড়ে নিন

১. রেফারেন্স কাউন্টিং (Reference Counting)

​পাইথনে যখনই কোনো অবজেক্ট তৈরি হয়, পাইথন ট্র্যাক রাখে যে সেই অবজেক্টটিকে কয়টি ভেরিয়েবল নির্দেশ (Reference) করছে।

import sys

a = [1, 2, 3]

print(sys.getrefcount(a))  # আউটপুট সাধারণত ২ দেখাবে (একটি 'a' এর জন্য, অন্যটি ফাংশনের ভেতরের সাময়িক রেফারেন্স)

b = a  # আরেকটি ভেরিয়েবল একই লিস্টকে নির্দেশ করছে

print(sys.getrefcount(a))  # এখন রেফারেন্স কাউন্ট ১ বেড়ে যাবে

যখন কোনো অবজেক্টের রেফারেন্স কাউন্ট ০ (শূন্য) হয়ে যায়, পাইথন সাথে সাথে মেমোরি থেকে সেই অবজেক্টটিকে মুছে ফেলে।

​২. গার্বেজ কালেকশন (Garbage Collection - GC)

​কখনো কখনো কোডে "Cyclic Reference" তৈরি হয় (যখন অবজেক্ট A অবজেক্ট B-কে নির্দেশ করে, আর অবজেক্ট B অবজেক্ট A-কে নির্দেশ করে)। এই ক্ষেত্রে রেফারেন্স কাউন্ট কখনো শূন্য হয় না। এই মেমোরি লিক বন্ধ করতে পাইথনের বিল্ট-ইন Garbage Collector ব্যাকএন্ডে রান করে এবং এই সাইকেলগুলোকে খুঁজে বের করে মেমোরি মুক্ত করে।

​২৩. কনকারেন্সি এবং প্যারালালিজম (Concurrency vs Parallelism)

​বড় কোনো অ্যাপ্লিকেশন বা স্ক্রিপ্ট যখন একসাথে অনেকগুলো কাজ করতে যায় (যেমন একই সাথে ১০০টি ওয়েবসাইট থেকে ডাটা ডাউনলোড করা), তখন পাইথনের তিনটি অ্যাডভান্সড কনসেপ্ট বুঝতে হয়: Multithreading, Multiprocessing, এবং AsyncIO

​১. মাল্টিথ্রেডিং এবং GIL (Global Interpreter Lock)

বিঃদ্রঃ পাইথনের অ্যাডভান্সড ফিচার ও ক্যারিয়ার গাইড নিয়ে ২য় পার্ট পড়তে এখানে ক্লিক করুন

​পাইথনে একটি প্রধান সীমাবদ্ধতা হলো GIL। এর কারণে পাইথন একই সময়ে একটি সিপিইউ কোরে (CPU Core) মাত্র একটি থ্রেড রান করতে পারে।

        ​কখন ব্যবহার করবেন: আইও-বাউন্ড (I/O-bound) কাজের জন্য, যেমন ইন্টারনেট থেকে ডাটা নামানো বা           ফাইলে লেখালেখি করা। এখানে থ্রেডগুলো একটির জন্য আরেকটি অপেক্ষা না করে দ্রুত কাজ শেষ করতে           পারে।

​২. মাল্টিপ্রসেসিং (Multiprocessing)

​GIL-এর সীমাবদ্ধতা এড়াতে মাল্টিপ্রসেসিং ব্যবহার করা হয়। এটি আলাদা আলাদা সিপিইউ কোর ব্যবহার করে সম্পূর্ণ ভিন্ন প্রসেস তৈরি করে।

  • কখন ব্যবহার করবেন: সিপিইউ-বাউন্ড (CPU-bound) ভারী কাজের জন্য, যেমন ইমেজ প্রসেসিং, ভিডিও এডিটিং বা জটিল গাণিতিক হিসাব।

​৩. এসিনক্রোনাস প্রোগ্রামিং (AsyncIO)

​এটি পাইথনের আধুনিক এবং অত্যন্ত জনপ্রিয় একটি ফিচার। মাত্র ১টি থ্রেড ব্যবহার করেই async এবং await কিওয়ার্ডের মাধ্যমে হাজার হাজার কাজ একসাথে (Non-blocking উপায়ে) করা সম্ভব।

import asyncio

async def main():
    print("ডাউনলোড শুরু...")
    await asyncio.sleep(2)  # ২ সেকেন্ড অপেক্ষা (অন্য কাজকে সুযোগ দেওয়া)
    print("ডাউনলোড শেষ!")l==ll=llll=lllllll

asyncio.run(main())

Technical comparison chart showing how Python shares memory in multithreading and uses multiple CPU cores in multiprocessing.
Technical comparison chart showing how Python shares memory in multithreading and uses multiple CPU cores in multiprocessing.

২৪. কোড টেস্টিং (Unit Testing in Python)

​একজন প্রফেশনাল ডেভেলপার কোড লেখার পর সেটি নিজে নিজে টেস্ট না করে অটোমেটেড টেস্ট কোড লিখে রাখেন। এতে পরবর্তীতে কোডের কোনো অংশ পরিবর্তন করলে অন্য কোথাও বাগ (Bug) তৈরি হয়েছে কিনা তা নিমেষেই ধরা পড়ে। পাইথনে এর জন্য বিল্ট-ইন unittest মডিউল রয়েছে।

import unittest

# যে ফাংশনটি টেস্ট করা হবে
def add(x, y):
    return x + y

# টেস্ট ক্লাস তৈরি
class TestMathOperations(unittest.TestCase):
    def test_add(self):
        self.assertEqual(add(2, 3), 5)
        self.assertEqual(add(-1, 1), 0)

if __name__ == "__main__":
    unittest.main()

টার্মিনালে এই কোডটি রান করলে পাইথন আপনাকে জানিয়ে দেবে আপনার ফাংশনটি সব কন্ডিশনে সঠিকভাবে কাজ করছে কিনা।

​২৫. কোড প্রোফাইলিং এবং অপ্টিমাইজেশন (Code Profiling & Speed Optimization)

বিঃদ্রঃ পাইথন প্রোগ্রামিং জিরো টু হিরো: ওয়েব ডেভেলপমেন্ট, এআই এবং অটোমেশন নিয়ে ৩য় পার্ট পড়তে এখানে ক্লিক করুন

আপনার কোড সঠিকভাবে কাজ করছে, কিন্তু সেটি কি যথেষ্ট দ্রুত? বড় প্রজেক্টে কোডের পারফরম্যান্স চেক করার জন্য Profiling করা হয়। পাইথনের cProfile বা timeit মডিউল ব্যবহার করে দেখা যায় কোডের কোন লাইনটি চলতে সবচেয়ে বেশি সময় নিচ্ছে।

​কোড দ্রুত করার প্রফেশনাল টিপস:

  1. বিল্ট-ইন ফাংশন ব্যবহার করুন: নিজের তৈরি লুপের চেয়ে পাইথনের বিল্ট-ইন ফাংশন (যেমন map(), filter(), sum()) অনেক দ্রুত চলে, কারণ এগুলো ব্যাকএন্ডে C ল্যাঙ্গুয়েজে অপ্টিমাইজ করা।
  2. সঠিক ডেটা স্ট্রাকচার বাছুন: কোনো উপাদান খোঁজার জন্য (Search) লিস্টের (List) চেয়ে সেট (Set) বা ডিকশনারি (Dictionary) কয়েক হাজার গুণ দ্রুত কাজ করে।
  3. PyPy ব্যবহার করে দেখুন: আপনার কোড যদি খুব বেশি ভারী গাণিতিক হিসাবের হয়, তবে স্ট্যান্ডার্ড CPython ইন্টারপ্রেটারের বদলে PyPy ব্যবহার করতে পারেন, যা জাস্ট-ইন-টাইম (JIT) কম্পাইলার ব্যবহার করে কোডকে কয়েক গুণ স্পীড বাড়িয়ে দেয়।
A line graph illustrating the speed improvement after optimizing Python code using built-in functions.
A line graph illustrating the speed improvement after optimizing Python code using built-in functions.

২৬. ওপেন সোর্স এবং রিয়েল-ওয়ার্ল্ড কন্ট্রিবিউশন (Open Source & Beyond)

​পাইথন জিরো টু হিরো গাইডের একদম শেষ ধাপে আপনাকে স্বাগতম। আপনি এখন পাইথনের বেসিক, অ্যাডভান্সড, ডাটাবেজ, ওয়েব/এআই ফ্রেমওয়ার্ক এবং মেমোরি ম্যানেজমেন্ট জানেন। এবার সময় বাস্তব প্রজেক্টে কাজ করার।

​ওপেন সোর্সে কন্ট্রিবিউট করার সুবিধা:

  1. গিটহাবে (GitHub) বিশ্বের বড় বড় ওপেন সোর্স প্রজেক্টের (যেমন Django, Pandas, বা Requests) কোড সবার জন্য উন্মুক্ত থাকে।
  2. ​আপনি তাদের "Issues" ট্যাবে গিয়ে ছোট ছোট বাগ ফিক্স করে বা ডকুমেন্টেশন উন্নত করে কন্ট্রিবিউট করতে পারেন।
  3. ​বড় প্রজেক্টে আপনার একটি কোড যুক্ত হওয়া মানে আপনার সিভি বা পোর্টফোলিও আন্তর্জাতিক মানের হয়ে যাওয়া, যা দেশি-বিদেশি রিমোট জবের ক্ষেত্রে আপনাকে সবার চেয়ে এগিয়ে রাখবে।

​কমপ্লিট পাইথন রোডম্যাপ সমাপনী ড্যাশবোর্ড

Complete Python Roadmap Final Dashboard
Complete Python Roadmap Final Dashboard

ধন্যবাদান্তে,

টিম Daily Tech News

ইউআরএল: Daily Tech News

ইউআরএল: Tech News 24

© ২০২৬ - আপনার অনলাইন দুর্গের পাহারাদার