কম্পিউটার টিউটোরিয়াল

পাইথনে প্রসেস সিঙ্ক্রোনাইজেশন ও পুলিং (Multiprocessing Pool)


সিঙ্ক্রোনাইজেশন: Lock

একই সময়ে একাধিক প্রসেস শেয়ারড রিসোর্স (যেমন stdout) এক্সেস করলে ডেটা করাপ্ট হতে পারে। Lock দিয়ে এটাই রোধ করা যায়।


from multiprocessing import Process, Lock

def worker(lock, num):
    lock.acquire()
    print(f'hello world {num}')
    lock.release()

if __name__ == '__main__':
    lock = Lock()
    for num in range(10):
        Process(target=worker, args=(lock, num)).start()

Multiprocessing Pool

Pool ক্লাস দিয়ে প্রসেস পুল বানিয়ে টাস্ক ডিস্ট্রিবিউট করা যায়। এটি আটোমেটিক্যালি লোড ব্যালেন্স করে।

প্রধান মেথডস

উদাহরণ: Pool ব্যবহার


from multiprocessing import Pool
import time

def square(x):
    return x * x

if __name__ == '__main__':
    with Pool(processes=4) as pool:
        # Async single task
        res = pool.apply_async(square, (10,))
        print(res.get(timeout=1))  # 100
        
        # Map (ব্লকিং)
        print(pool.map(square, range(10)))  # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
        
        # imap (লেজি)
        it = pool.imap(square, range(10))
        print(next(it))  # 0
        print(next(it))  # 1
        print(next(it, timeout=1))  # 4
        
        # Timeout টেস্ট
        res = pool.apply_async(time.sleep, (10,))
        try:
            res.get(timeout=1)
        except multiprocessing.TimeoutError:
            print("Task timed out!")

AsyncResult অবজেক্ট

  • get([timeout]) — রিজাল্ট পাওয়া পর্যন্ত অপেক্ষা
  • wait([timeout]) — রেডি হওয়া পর্যন্ত অপেক্ষা
  • ready() — কমপ্লিট হয়েছে কিনা
  • successful() — এরর ছাড়া কমপ্লিট হয়েছে কিনা

কখন Pool ব্যবহার করবেন?

  • এমবarrassingly parallel টাস্ক (লুপের প্রতিটি ইটারেশন স্বাধীন)।
  • CPU-বাউন্ড কাজ (ইমেজ প্রসেসিং, ক্যালকুলেশন, ডেটা ট্রান্সফরমেশন)।
  • প্রসেস তৈরি/নষ্ট করার ওভারহেড কমাতে।
  1. পাইথনে কোরিলেশন এবং রিগ্রেশন

  2. পাইথনে *args এবং **kwargs

  3. পাইথনে পারমুটেশন ও কম্বিনেশন (Permutation and Combination in Python)

  4. পাইথনে =+ এবং += অপারেটরের পার্থক্য

কপিরাইট © https://bd.wsxdn.com সমস্ত অধিকার সংরক্ষিত
মেথডবিবরণ
apply(func, args)ব্লকিং: এক টাস্ক রান করে, রিজাল্ট পাওয়া পর্যন্ত অপেক্ষা
apply_async(func, args, callback)নন-ব্লকিং: AsyncResult রিটার্ন করে
map(func, iterable)ব্লকিং: প্রতিটি আইটেমে ফাংশন অ্যাপ্লাই করে লিস্ট রিটার্ন
map_async(func, iterable)নন-ব্লকিং map
imap(func, iterable)লেজি ইটারেটর রিটার্ন করে (মেমরি দক্ষ)
close()নতুন টাস্ক নেওয়া বন্ধ, প্রসেসগুলো কাজ শেষ করলে বন্ধ
terminate()তৎক্ষণা সব প্রসেস বন্ধ
join()close()/terminate() পরে কল করতে হয়