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

পাইথনে মাল্টিপ্রসেসিং (Multiprocessing) πλήর গাইড


ভূমিকা

multiprocessing প্যাকেজ প্রসেস-ভিত্তিক প্যারালেলিজম সক্ষম করে। প্রতিটি প্রসেসের নিজস্ব মেমরি স্পেস থাকে, GIL-র বাধা নেই। API threading-এর মতো।

বেসিক প্রসেস তৈরি


from multiprocessing import Process

def display():
    print('Hi !! I am Python')

if __name__ == '__main__':
    p = Process(target=display)
    p.start()
    p.join()  # প্রসেস শেষ হওয়া পর্যন্ত অপেক্ষা

আর্গুমেন্ট পাস করা


from multiprocessing import Process

def display(name):
    print(f'Hi !!! {name}')

if __name__ == '__main__':
    p = Process(target=display, args=('Python',))
    p.start()
    p.join()

একাধিক প্রসেস (কিউব ক্যালকুলেশন)


from multiprocessing import Process

def cube(numbers):
    for x in numbers:
        print(f'{x} cube is {x**3}')

if __name__ == '__main__':
    numbers = [3, 4, 5, 6, 7, 8]
    p = Process(target=cube, args=(numbers,))
    p.start()
    p.join()
    print("Done")

দুই প্রসেস সমান্তরাল (কিউব + ইভেন চেক)


from multiprocessing import Process

def cube(numbers):
    for x in numbers:
        print(f'{x} cube is {x**3}')

def even_no(numbers):
    for x in numbers:
        if x % 2 == 0:
            print(f'{x} is an even number')

if __name__ == '__main__':
    numbers = [3, 4, 5, 6, 7, 8]
    p1 = Process(target=cube, args=(numbers,))
    p2 = Process(target=even_no, args=(numbers,))
    p1.start()
    p2.start()
    p1.join()
    p2.join()
    print("Done")

ইন্টার-প্রসেস কমিউনিকেশন (IPC)

Pipe (দুই প্রসেসের মধ্যে)


from multiprocessing import Process, Pipe

def sender(conn):
    conn.send(['Hi!! I am Python'])
    conn.close()

if __name__ == '__main__':
    parent_conn, child_conn = Pipe()
    p = Process(target=sender, args=(child_conn,))
    p.start()
    print(parent_conn.recv())  # ['Hi!! I am Python']
    p.join()

Queue (বহু প্রসেসের জন্য সেফ)


import multiprocessing

def even_numbers(numbers, q):
    for n in numbers:
        if n % 2 == 0:
            q.put(n)

if __name__ == '__main__':
    q = multiprocessing.Queue()
    p = multiprocessing.Process(target=even_numbers, args=(range(10), q))
    p.start()
    p.join()
    
    while not q.empty():
        print(q.get())
# আউটপুট: 0 2 4 6 8

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


from multiprocessing import Process, Lock

def disp_name(lock, name):
    lock.acquire()
    print('Hi', name)
    lock.release()

if __name__ == '__main__':
    lock = Lock()
    names = ['Aadrika', 'Adwaita', 'Sakya', 'Sanj']
    for name in names:
        Process(target=disp_name, args=(lock, name)).start()

Logging


import multiprocessing, logging

logger = multiprocessing.log_to_stderr()
logger.setLevel(logging.INFO)
logger.warning('Error has occurred')

সারসংক্ষেপ

  • Process — নতুন প্রসেস তৈরি।
  • start()/join() — চালানো/অপেক্ষা।
  • Pipe — পয়েন্ট-টু-পয়েন্ট কমিউনিকেশন।
  • Queue — থ্রেড/প্রসেস-সেফ কিউ।
  • Lock — ক্রিটিক্যাল সেকশন সুরক্ষা।
  • সর্বদা if __name__ == '__main__': ব্লকের ভেতরে প্রসেস তৈরি করুন (Windows-এ আবশ্যক)।
  1. পাইথনে issuperset() ফাংশন

  2. পাইথনে ছদ্ম-টার্মিনাল ইউটিলিটি

  3. পাইথনে স্ট্রিং-এ এসকেপ সিকোয়েন্স প্রসেস করা

  4. Python Socket Error 48 সমাধান