প্রক্রিয়াগুলির মধ্যে সিঙ্ক্রোনাইজেশন
মাল্টিপ্রসেসিং হল একটি প্যাকেজ যা একটি API ব্যবহার করে স্পনিং প্রসেস সমর্থন করে। এই প্যাকেজটি স্থানীয় এবং দূরবর্তী সঙ্গতি উভয়ের জন্য ব্যবহৃত হয়। এই মডিউলটি ব্যবহার করে, প্রোগ্রামার একটি প্রদত্ত মেশিনে একাধিক প্রসেসর ব্যবহার করতে পারে। এটি Windows এবং UNIX OS এ চলে৷
৷সমস্ত সমতুল্য সিঙ্ক্রোনাইজেশন আদিম এই প্যাকেজে উপস্থিত রয়েছে৷
উদাহরণ কোড
from multiprocessing import Process, Lock def my_function(x, y): x.acquire() print ('hello world', y) x.release() if __name__ == '__main__': lock = Lock() for num in range(10): Process(target= my_function, args=(lock, num)).start()
এখানে একটি উদাহরণ লক করতে পারে তা নিশ্চিত করতে যে শুধুমাত্র একটি প্রক্রিয়া একবারে মানক আউটপুট প্রদর্শন করতে পারে।
পুলিং
পুলিংয়ের জন্য, আমরা পুল ক্লাস ব্যবহার করি। যখন কেউ একটি প্রক্রিয়ার পুল তৈরি করতে পারে যা এটিতে জমা দেওয়া সমস্ত কাজ বহন করবে।
class multiprocessing.Pool([processes[, initializer[, initargs[, maxtasksperchild]]]])
একটি পুল অবজেক্ট কর্মীদের একটি পুল নিয়ন্ত্রণ করে কোন কাজটি জমা দেওয়া যেতে পারে তা নির্বাচন করতে এবং এটি অ্যাসিঙ্ক্রোনাস ফলাফলকে সমর্থন করে যার টাইমআউট, কলব্যাক এবং একটি সমান্তরাল মানচিত্র বাস্তবায়ন রয়েছে৷
cpu_count() ব্যবহার করা হয় যদি প্রক্রিয়াটি কিছুই না হয় এবং ইনিশিয়ালাইজার(*initargs) এই ফাংশনটি কল করে যখন ইনিশিয়ালাইজার কিছুই না হয়।
apply(func[, args[, kwds]])
এটি apply() বিল্ট-ইন ফাংশনের মতোই। ফলাফল প্রস্তুত না হওয়া পর্যন্ত এটি অবরুদ্ধ করা হয়, যদি এটি সমান্তরালভাবে কাজ করতে চায় তাহলে apply_async() পদ্ধতিটি আরও ভাল৷
apply_async(func[, args[, kwds[, callback]]])
একটি ফলাফল বস্তু প্রদান করে৷
মানচিত্র(func, iterable [, chunksize])
map() একটি অন্তর্নির্মিত ফাংশন এবং এটি শুধুমাত্র একটি পুনরাবৃত্তিযোগ্য যুক্তি সমর্থন করে। ফলাফল প্রস্তুত না হওয়া পর্যন্ত এটি ব্লক করে।
এই পদ্ধতিতে, পুনরাবৃত্তিযোগ্য কয়েকটি ছোট অংশে বিভক্ত হয় এবং এই ছোট অংশগুলি একটি পৃথক কাজ হিসাবে প্রক্রিয়া পুলে জমা দেওয়া হয়।
map_async(func, iterable[, chunksize[, callback]])
একটি ফলাফল বস্তু প্রদান করে৷
imap(func, iterable[, chunksize])
এটি itertools.imap().
এর মতইআর্গুমেন্টের সাইজ ম্যাপ().
এ ব্যবহৃত একটির মতইimap_unordered(func, iterable[, chunksize])
এটি imap() এর মতোই, ব্যতীত রিটিউনিং ইটারেটর অর্ডার করা উচিত৷
বন্ধ()
যখন একজন কর্মী সমস্ত কাজ সম্পন্ন করে তখন কর্মী প্রক্রিয়া থেকে বেরিয়ে যায়।
সমাপ্ত()
যদি আমরা কাজটি সম্পূর্ণ না করে অবিলম্বে কর্মী প্রক্রিয়া বন্ধ করতে চাই তবে এই পদ্ধতিটি ব্যবহার করা হয়।
যোগ দিন()
join() পদ্ধতি ব্যবহার করার আগে, আমাদের অবশ্যই ক্লোজ() এবং টার্মিনেট() ফাংশন ব্যবহার করতে হবে।
class multiprocessing.pool.AsyncResult
Pool.apply_async() এবং Pool.map_async() দ্বারা ফেরত দেওয়া হয়েছে।
পান([টাইমআউট])
এই ফাংশনটি যখন আসে তখন ফলাফল প্রদান করে৷
অপেক্ষা করুন([টাইমআউট])
এই অপেক্ষা ফাংশনটি ব্যবহার করে, আমরা ফলাফল উপলব্ধ হওয়ার জন্য বা টাইমআউট সেকেন্ড পাস না হওয়া পর্যন্ত অপেক্ষা করি৷
তৈরি()
এই ফাংশনটি কল সম্পূর্ণ হয়েছে বা না হয়েছে তা ফেরত দেয়।
সফল()
কোনো ত্রুটি ছাড়াই কল সম্পূর্ণ হলে এই ফাংশনটি ফিরে আসে।
উদাহরণ কোড
# -*- coding: utf-8 -*- """ Created on Sun Sep 30 12:17:58 2018 @author: Tutorials Point """ from multiprocessing import Pool import time def myfunction(m): return m*m if __name__ == '__main__': my_pool = Pool(processes=4) # start 4 worker processes result = my_pool.apply_async(myfunction, (10,)) # evaluate "f(10)" asynchronously in a single process print (result.get(timeout=1)) print (my_pool.map(myfunction, range(10))) # prints "[0, 1, 4,..., 81]" my_it = my_pool.imap(myfunction, range(10)) print (my_it.next() ) # prints "0" print (my_it.next() ) # prints "1" print (my_it.next(timeout=1) ) # prints "4" unless your computer is *very* slow result = my_pool.apply_async(time.sleep, (10,)) print (result.get(timeout=1) ) # raises multiprocessing.TimeoutError