সিঙ্ক্রোনাইজেশন: 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 ক্লাস দিয়ে প্রসেস পুল বানিয়ে টাস্ক ডিস্ট্রিবিউট করা যায়। এটি আটোমেটিক্যালি লোড ব্যালেন্স করে।
প্রধান মেথডস
| মেথড | বিবরণ |
|---|---|
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() পরে কল করতে হয় |