ازگر ملٹی پروسیسنگ فار لوپ

Azgr Ml Y Prwsysng Far Lwp



ملٹی پروسیسنگ ملٹی تھریڈنگ سے موازنہ ہے۔ تاہم، اس میں فرق ہے کہ ہم ایک لمحے میں صرف ایک تھریڈ پر عمل درآمد کر سکتے ہیں GIL کی وجہ سے جو تھریڈنگ کے لیے استعمال کیا جاتا ہے۔ ملٹی پروسیسنگ کئی CPU کوروں میں ترتیب وار کارروائیوں کو انجام دینے کا عمل ہے۔ دھاگوں کو متوازی طور پر نہیں چلایا جا سکتا۔ تاہم، ملٹی پروسیسنگ ہمیں عمل کو قائم کرنے اور انہیں مختلف CPU کوروں پر بیک وقت چلانے کی اجازت دیتی ہے۔ لوپ، جیسے فار لوپ، سب سے زیادہ استعمال ہونے والی اسکرپٹنگ زبانوں میں سے ایک ہے۔ ایک ہی کام کو مختلف اعداد و شمار کا استعمال کرتے ہوئے دہرائیں جب تک کہ ایک معیار، جیسے کہ تکرار کی ایک پہلے سے طے شدہ تعداد تک پہنچ نہ جائے۔ لوپ ایک ایک کرکے ہر تکرار کو پورا کرتا ہے۔

مثال 1: Python ملٹی پروسیسنگ ماڈیول میں فار لوپ کا استعمال

اس مثال میں، ہم for-loop اور Python ملٹی پروسیسنگ ماڈیول کلاس عمل کا استعمال کرتے ہیں۔ ہم ایک بہت سیدھی مثال کے ساتھ شروع کرتے ہیں تاکہ آپ جلدی سے سمجھ سکیں کہ Python ملٹی پروسیسنگ فار لوپ کیسے کام کرتی ہے۔ ایک انٹرفیس کا استعمال کرتے ہوئے جو تھریڈنگ ماڈیول کے مقابلے میں ہے، ملٹی پروسیسنگ عمل کی تخلیق کو پیک کرتی ہے۔







دھاگوں کے بجائے ذیلی عمل کو استعمال کرتے ہوئے، ملٹی پروسیسنگ پیکیج مقامی اور دور دراز دونوں طرح کی ہم آہنگی فراہم کرتا ہے، اس طرح گلوبل انٹرپریٹر لاک سے بچتا ہے۔ ایک ترتیب کے ذریعے مسلسل اعادہ کرنے کے لیے فار لوپ کا استعمال کریں، جو کہ سٹرنگ آبجیکٹ یا ٹوپل ہو سکتا ہے۔ یہ دیگر پروگرامنگ زبانوں میں نظر آنے والے مطلوبہ الفاظ کی طرح کم کارکردگی کا مظاہرہ کرتا ہے اور دوسری پروگرامنگ زبانوں میں پائے جانے والے تکراری طریقہ کی طرح۔ ایک نئی ملٹی پروسیسنگ شروع کرنے سے، آپ ایک فار لوپ چلا سکتے ہیں جو بیک وقت ایک طریقہ کار کو انجام دیتا ہے۔



آئیے 'اسپائیڈر' ٹول کا استعمال کرتے ہوئے کوڈ پر عمل درآمد کے لیے کوڈ کو لاگو کرکے شروع کریں۔ ہمارا ماننا ہے کہ 'اسپائیڈر' Python کو چلانے کے لیے بھی بہترین ہے۔ ہم ایک ملٹی پروسیسنگ ماڈیول عمل درآمد کرتے ہیں جو کوڈ چل رہا ہے۔ ازگر کے تصور میں ملٹی پروسیسنگ جسے 'پراسیس کلاس' کہا جاتا ہے ایک نیا ازگر کا عمل تخلیق کرتا ہے، اسے کوڈ پر عمل درآمد کرنے کا طریقہ فراہم کرتا ہے، اور پیرنٹ ایپلیکیشن کو عمل درآمد کا انتظام کرنے کا طریقہ فراہم کرتا ہے۔ پروسیس کلاس میں start() اور join() طریقہ کار شامل ہیں، یہ دونوں ہی اہم ہیں۔



اگلا، ہم صارف کی طرف سے طے شدہ فنکشن کی وضاحت کرتے ہیں جسے 'func' کہتے ہیں۔ چونکہ یہ صارف کی طرف سے طے شدہ فنکشن ہے، اس لیے ہم اسے اپنی پسند کا نام دیتے ہیں۔ اس فنکشن کے باڈی کے اندر، ہم 'سبجیکٹ' متغیر کو بطور دلیل اور 'ریاضی' ویلیو پاس کرتے ہیں۔ اس کے بعد، ہم 'print()' فنکشن کو کال کرتے ہیں، اس بیان کو پاس کرتے ہوئے 'عام مضمون کا نام ہے' کے ساتھ ساتھ اس کی 'سبجیکٹ' دلیل جس میں قدر ہوتی ہے۔ پھر، مندرجہ ذیل مرحلے میں، ہم 'if name== _main_' استعمال کرتے ہیں، جو آپ کو کوڈ چلانے سے روکتا ہے جب فائل کو ماڈیول کے طور پر درآمد کیا جاتا ہے اور آپ کو صرف اس وقت ایسا کرنے کی اجازت دیتا ہے جب مواد کو اسکرپٹ کے طور پر عمل میں لایا جائے۔





آپ جس حالت کے سیکشن کے ساتھ شروع کرتے ہیں اس کے بارے میں زیادہ تر حالات میں مواد فراہم کرنے کے لیے ایک مقام کے طور پر سوچا جا سکتا ہے جسے صرف اس وقت عمل میں لایا جانا چاہیے جب آپ کی فائل اسکرپٹ کے طور پر چلتی ہے۔ پھر، ہم دلیل کے مضمون کا استعمال کرتے ہیں اور اس میں کچھ قدریں محفوظ کرتے ہیں جو کہ 'سائنس'، 'انگلش' اور 'کمپیوٹر' ہیں۔ اس کے بعد اس عمل کو مندرجہ ذیل مرحلے میں 'process1[]' کا نام دیا گیا ہے۔ پھر، ہم عمل میں فنکشن کو کال کرنے کے لیے 'process(target=func)' کا استعمال کرتے ہیں۔ ٹارگٹ کا استعمال فنکشن کو کال کرنے کے لیے کیا جاتا ہے، اور ہم اس عمل کو 'P' متغیر میں محفوظ کرتے ہیں۔

اس کے بعد، ہم 'append()' فنکشن کو کال کرنے کے لیے 'process1' کا استعمال کرتے ہیں جو فہرست کے آخر میں ایک آئٹم کا اضافہ کرتا ہے جو ہمارے فنکشن 'func' میں موجود ہے۔ چونکہ یہ عمل 'P' متغیر میں محفوظ ہے، اس لیے ہم 'P' کو اس کی دلیل کے طور پر اس فنکشن میں منتقل کرتے ہیں۔ آخر میں، ہم عمل شروع کرنے کے لیے 'P' کے ساتھ 'start()' فنکشن استعمال کرتے ہیں۔ اس کے بعد، ہم 'موضوع' دلیل فراہم کرتے ہوئے دوبارہ طریقہ چلاتے ہیں اور مضمون میں 'for' کا استعمال کرتے ہیں۔ پھر، ایک بار پھر 'process1' اور 'add()' طریقہ استعمال کرتے ہوئے، ہم عمل شروع کرتے ہیں۔ اس کے بعد عمل چلتا ہے اور آؤٹ پٹ واپس آ جاتا ہے۔ اس کے بعد طریقہ کار کو 'join()' تکنیک کا استعمال کرتے ہوئے ختم کرنے کے لیے کہا جاتا ہے۔ وہ عمل جو 'join()' طریقہ کار کو نہیں کہتے ہیں وہ باہر نہیں آئیں گے۔ ایک اہم نکتہ یہ ہے کہ اگر آپ اس عمل کے ذریعے کوئی دلائل فراہم کرنا چاہتے ہیں تو 'args' کلیدی لفظ کا پیرامیٹر استعمال کرنا چاہیے۔




اب، آپ آؤٹ پٹ میں دیکھ سکتے ہیں کہ اسٹیٹمنٹ سب سے پہلے 'ریاضی' کے مضمون کی ویلیو پاس کرکے ظاہر ہوتا ہے جسے ہم 'func' فنکشن میں پاس کرتے ہیں کیونکہ ہم اسے پہلے 'process' فنکشن کا استعمال کرتے ہوئے کہتے ہیں۔ اس کے بعد، ہم 'ضمیمہ()' کمانڈ کا استعمال کرتے ہیں ان اقدار کو رکھنے کے لیے جو فہرست میں پہلے سے موجود تھیں جو آخر میں شامل کی گئی ہیں۔ پھر، 'سائنس'، 'کمپیوٹر'، اور 'انگلش' پیش کیے گئے۔ لیکن، جیسا کہ آپ دیکھ سکتے ہیں، اقدار صحیح ترتیب میں نہیں ہیں۔ اس کی وجہ یہ ہے کہ وہ طریقہ کار ختم ہوتے ہی ایسا کرتے ہیں اور اپنے پیغام کی اطلاع دیتے ہیں۔

مثال 2: تسلسل کے لیے لوپ کو ملٹی پروسیسنگ کے متوازی فار لوپ میں تبدیل کرنا

اس مثال میں، ملٹی پروسیسنگ لوپ ٹاسک کو متوازی فار لوپ ٹاسک میں تبدیل کرنے سے پہلے ترتیب وار انجام دیا جاتا ہے۔ آپ مجموعے یا سٹرنگ جیسے ترتیبوں کو اس ترتیب سے چلا سکتے ہیں جس ترتیب سے وہ فار لوپس کا استعمال کرتے ہوئے ہوتے ہیں۔

اب، آئیے کوڈ کو نافذ کرنا شروع کریں۔ سب سے پہلے، ہم ٹائم ماڈیول سے 'نیند' درآمد کرتے ہیں۔ ٹائم ماڈیول میں 'sleep()' طریقہ کار کا استعمال کرتے ہوئے، آپ کالنگ تھریڈ کے عمل کو جب تک چاہیں معطل کر سکتے ہیں۔ پھر، ہم رینڈم ماڈیول سے 'رینڈم' استعمال کرتے ہیں، 'func' کے نام سے ایک فنکشن کی وضاحت کرتے ہیں، اور 'argu' کی ورڈ پاس کرتے ہیں۔ پھر، ہم 'val' کا استعمال کرتے ہوئے ایک بے ترتیب قدر بناتے ہیں اور اسے 'random' پر سیٹ کرتے ہیں۔ پھر، ہم 'sleep()' طریقہ استعمال کرتے ہوئے تھوڑی مدت کے لیے بلاک کرتے ہیں اور 'val' کو بطور پیرامیٹر پاس کرتے ہیں۔ پھر، ایک پیغام کو منتقل کرنے کے لیے، ہم 'print()' طریقہ چلاتے ہیں، الفاظ 'ready' اور کلیدی لفظ 'arg' کو اس کے پیرامیٹر کے ساتھ ساتھ 'created' اور 'val' کا استعمال کرتے ہوئے قدر پاس کرتے ہیں۔

آخر میں، ہم 'فلش' کا استعمال کرتے ہیں اور اسے 'True' پر سیٹ کرتے ہیں۔ صارف فیصلہ کر سکتا ہے کہ Python کے پرنٹ فنکشن میں فلش آپشن کا استعمال کرتے ہوئے آؤٹ پٹ کو بفر کرنا ہے یا نہیں۔ اس پیرامیٹر کی False کی ڈیفالٹ قدر بتاتی ہے کہ آؤٹ پٹ بفر نہیں ہوگا۔ اگر آپ اسے درست پر سیٹ کرتے ہیں تو آؤٹ پٹ ایک دوسرے کے بعد لائنوں کی ایک سیریز کے طور پر ظاہر ہوتا ہے۔ پھر، ہم داخلے کے پوائنٹس کو محفوظ بنانے کے لیے 'if name== main' استعمال کرتے ہیں۔ اگلا، ہم کام کو ترتیب وار انجام دیتے ہیں۔ یہاں، ہم رینج کو '10' پر سیٹ کرتے ہیں جس کا مطلب ہے کہ لوپ 10 تکرار کے بعد ختم ہو جاتا ہے۔ اگلا، ہم 'print()' فنکشن کو کال کرتے ہیں، اسے 'تیار' ان پٹ اسٹیٹمنٹ پاس کرتے ہیں، اور 'flush=True' آپشن استعمال کرتے ہیں۔


اب آپ دیکھ سکتے ہیں کہ جب ہم کوڈ پر عمل کرتے ہیں تو لوپ فنکشن کو '10' بار چلانے کا سبب بنتا ہے۔ یہ 10 بار اعادہ کرتا ہے، انڈیکس صفر سے شروع ہوتا ہے اور انڈیکس نو پر ختم ہوتا ہے۔ ہر پیغام میں ایک ٹاسک نمبر ہوتا ہے جو کہ ایک فنکشن نمبر ہوتا ہے جسے ہم 'arg' اور تخلیق نمبر کے طور پر پاس کرتے ہیں۔


اس ترتیب وار لوپ کو اب ایک ملٹی پروسیسنگ متوازی فار لوپ میں تبدیل کیا جا رہا ہے۔ ہم ایک ہی کوڈ استعمال کرتے ہیں، لیکن ہم ملٹی پروسیسنگ کے لیے کچھ اضافی لائبریریوں اور فنکشنز میں جا رہے ہیں۔ لہذا، ہمیں ملٹی پروسیسنگ سے عمل درآمد کرنا چاہیے، جیسا کہ ہم نے پہلے بیان کیا ہے۔ اس کے بعد، ہم 'func' نامی ایک فنکشن بناتے ہیں اور رینڈم نمبر حاصل کرنے کے لیے 'val=random' استعمال کرنے سے پہلے کلیدی لفظ 'arg' کو پاس کرتے ہیں۔

پھر، پیغام دکھانے کے لیے 'print()' طریقہ استعمال کرنے اور تھوڑی دیر میں 'val' پیرامیٹر دینے کے بعد، ہم انٹری پوائنٹس کو محفوظ بنانے کے لیے 'if name= main' فنکشن کا استعمال کرتے ہیں۔ اس کے بعد، ہم ایک پروسیس بناتے ہیں اور 'process' کا استعمال کرتے ہوئے عمل میں فنکشن کو کال کرتے ہیں اور 'target=func' کو پاس کرتے ہیں۔ پھر، ہم 'func'، 'arg' کو پاس کرتے ہیں، ویلیو 'm' کو پاس کرتے ہیں، اور رینج '10' کو پاس کرتے ہیں جس کا مطلب ہے کہ لوپ '10' تکرار کے بعد فنکشن کو ختم کر دیتا ہے۔ پھر، ہم 'process' کے ساتھ 'start()' طریقہ استعمال کرتے ہوئے عمل شروع کرتے ہیں۔ اس کے بعد، ہم 'join()' طریقہ کار کو عمل کے مکمل ہونے کا انتظار کرنے اور اس کے بعد تمام عمل کو مکمل کرنے کے لیے کہتے ہیں۔


لہذا، جب ہم کوڈ پر عمل کرتے ہیں، فنکشنز مین پروسیس کو کال کرتے ہیں اور ان پر عمل درآمد شروع کرتے ہیں۔ تاہم، جب تک تمام کام مکمل نہیں ہو جاتے، وہ کیے جاتے ہیں۔ ہم اسے دیکھ سکتے ہیں کیونکہ ہر کام بیک وقت انجام دیا جاتا ہے۔ جیسے ہی یہ ختم ہوتا ہے اپنے پیغام کی اطلاع دیتا ہے۔ اس کا مطلب یہ ہے کہ اگرچہ پیغامات ترتیب سے باہر ہیں، تمام '10' تکرار مکمل ہونے کے بعد لوپ ختم ہو جاتا ہے۔

نتیجہ

ہم نے اس مضمون میں Python ملٹی پروسیسنگ فار لوپ کا احاطہ کیا۔ ہم نے دو مثالیں بھی پیش کیں۔ پہلی مثال دکھاتی ہے کہ Python کی لوپ ملٹی پروسیسنگ لائبریری میں فار لوپ کو کیسے استعمال کیا جائے۔ اور دوسری مثال دکھاتی ہے کہ کس طرح ترتیب وار فار لوپ کو متوازی ملٹی پروسیسنگ فار لوپ میں تبدیل کیا جائے۔ ازگر ملٹی پروسیسنگ کے لیے اسکرپٹ بنانے سے پہلے، ہمیں ملٹی پروسیسنگ ماڈیول درآمد کرنا ہوگا۔