ما هي أفضل طريقة لتنفيذ المعالجة المتعددة في بايثون؟



ستقدم لك هذه المقالة المعالجة المتعددة في بايثون ، وفي هذه العملية ينتهي الأمر أيضًا بإعطائك عرضًا برمجيًا.

كان عام 2019 عامًا كبيرًا جدًا للتطور التكنولوجي في جميع أنحاء العالم. بدءًا من قيام الشركات المصنعة لأجهزة الكمبيوتر بإضافة المزيد من النوى إلى وحدات المعالجة المركزية والمعالجات إلى إطلاق شرائح أكثر ذكاءً في الهواتف المحمولة ، لم تعد المعالجة المتعددة حلماً. اليوم ، واحدة من أبرز لغات البرمجة التي تدعم المعالجة المتعددة هي . بفضل إدخالها لقوة المعالجة المتوازية في إصدارها ، يمكن للمبرمجين في جميع أنحاء العالم الآن إنشاء أكواد بسلاسة ليتم تنفيذها في وقت واحد وبالتالي وقت تشغيلها بمقدار كبير.

سيتم تغطية المؤشرات التالية في هذه المقالة ،





رر SQL للمبتدئين مع الأمثلة

لنبدأ ،

المعالجة المتعددة في بايثون

ما هي المعالجة المتعددة؟

يمكن ببساطة تعريف المعالجة المتعددة على أنها قدرة النظام على دعم أكثر من عملية واحدة في أي حالة معينة. ما يعنيه هذا هو أن التطبيقات في أنظمة المعالجة المتعددة تنقسم إلى أجزاء صغيرة ثم تعمل بشكل مستقل عن بعضها البعض من أجل زيادة الكفاءة وتقليل وقت التشغيل الكلي. يخصص المعالج في النظام لكل قطعة صغيرة خيطًا مستقلًا خاصًا بها ، مما يسمح لها بالعمل ككيان مستقل.



الحاجة إلى المعالجة المتعددة

تخيل نظام كمبيوتر يحتوي على نواة واحدة فقط في معالجها. إذا تم تعيين مهام متعددة لهذا المركز الفردي ، فسيتم تقسيم كل مهمة بينهما ثم التبديل إلى التالي. لن يؤدي هذا إلى زيادة مقدار الوقت المطلوب لإكمال كل مهمة ، ولكنه سيقلل أيضًا من الكفاءة الإجمالية للنظام.

من ناحية أخرى ، يمكن أن يحتوي الكمبيوتر متعدد المعالجات على معالج واحد يحتوي بدوره على عدة وحدات عاملة بداخله ، تسمى النوى الفردية التي لديها القدرة على تشغيل عدة مهام مختلفة بشكل مستقل في نفس الوقت. لا يؤدي هذا إلى زيادة كفاءة النظام فحسب ، بل يقلل أيضًا على المدى الطويل من وقت تشغيل النظام بمقدار كبير.



يمكن أن يكون نظام المعالجة المتعددة في بايثون من نوعين.

نظام متعدد المعالجات

يحتوي هذا النظام بشكل أساسي على معالجات متعددة موجودة تحت غطاء المحرك ، يمكن لكل منها أداء مهمة واحدة في كل مرة وتعمل كمكون مستقل.

نظام معالج متعدد النواة

يحتوي هذا النظام على نوى متعددة موجودة في نفس المعالج ، والتي من خلالها تعمل الوظائف الأساسية كوحدة منفصلة وتؤدي المهام التي تم تعيينها لها بشكل مستقل.

كود للمعالجة المتعددة في بايثون

الآن بعد أن اعتدت على المفهوم الأساسي للمعالجة المتعددة ، دعنا نستكشف كيف يمكن تحقيق المعالجة المتعددة في بايثون.

في Python ، يحتوي المترجم الفوري على واجهة برمجة تطبيقات بسيطة للغاية وبديهية تأخذ مهمة واحدة ، وتقسيمها إلى مكونات متعددة ومعالجتها بشكل مستقل.

ألق نظرة على وحدة البرنامج أدناه لفهم مفهوم المعالجة المتعددة في بيثون بشكل أفضل.

مثال 1

# importing the multi -essing module import multiprocessing def print_cube (num): '' وظيفة لطباعة مكعب من عدد معين '' طباعة ('Cube: {}'. تنسيق (num * num * num)) طباعة _square (عدد): وظيفة '' لطباعة مربع العدد المعطى '' print ('Square: {}'. format (num * num)) if __name__ == '__main__': # إنشاء عمليات p1 = معالجة متعددة. args = (10،)) p2 = المعالجة المتعددة. العملية (الهدف = print_cube، args = (10،)) # عملية البدء 1 p1.start () # عملية البدء 2 p2.start () # انتظر حتى تنتهي العملية 1 p1 .join () # انتظر حتى تنتهي العملية 2 p2.join () # انتهت كلتا العمليتين من الطباعة ('تم!')

انتاج |

مربع: 100

المكعب: 1000

فعله!

الآن دعونا نحلل هذا البرنامج لفهمه بشكل أفضل.

  1. الخطوة الأولى هي استيراد وحدة المعالجة المتعددة. للقيام بذلك ، استخدم بناء الجملة التالي: استيراد معالجة متعددة.

  2. الآن بعد أن تم استيراد وحدة المعالجة المتعددة ، دعونا نمضي قدمًا وننشئ عملية. من أجل القيام بذلك ، نقوم بإنشاء كائن من فئة Process وخصص له الوسيطات التالية. الهدف: الوظيفة التي يجب تنفيذها من خلال هذه العملية و args: الوسيطات التي يجب تمريرها إلى الوظيفة الهدف.

ملاحظة: يتمتع مُنشئ العملية بالقدرة على اتخاذ أهداف متعددة بالإضافة إلى الحجج ، ولكن في المثال أعلاه قمنا بتعيين هدفين ووسيطين فقط للعملية كما هو موضح أدناه.

p1 = المعالجة المتعددة. العملية (الهدف = print_square ، args = (10،))

p2 = المعالجة المتعددة. العملية (الهدف = print_cube ، args = (10،))

  1. الآن بعد أن تم إنشاء العملية ، دعونا نكتب بناء الجملة لبدء نفس العملية.

p1.start ()

p2.start ()

بمجرد بدء العملية ، يتم تشغيل البرنامج الحالي والبرنامج المنفذ بالفعل في وقت واحد. إذا احتجت في موقف معين إلى إيقاف تنفيذ البرنامج الحالي والتركيز فقط على تنفيذ البرنامج الموجود مسبقًا ، فإننا نستخدم وظيفة الانضمام كما هو موضح أدناه.

p1.join ()

p2.join ()

بمجرد إدخال بناء الجملة هذا ، سينتظر المترجم البرنامج p1 لإنهاء التنفيذ ثم ينتقل إلى البرنامج p2.

لفهم هذا المفهوم بشكل أكبر ، ألق نظرة على مثال آخر للمعالجة المتعددة في بايثون أدناه.

مثال 2

# استيراد وحدة المعالجة المتعددة ، استيراد وحدة المعالجة المتعددة ، استيراد نظام التشغيل def worker1 (): # طباعة معرف عملية الطباعة ('معرف عملية تشغيل worker1: {}'. تنسيق (os.getpid ())) def worker2 (): # printing عملية طباعة معرف ('ID of process running worker2: {}'. format (os.getpid ())) if __name__ == '__main__': # printing main program process id print ('ID of main process: {}'. format (os .getpid ())) # عمليات الإنشاء p1 = معالجة متعددة. العملية (الهدف = عامل 1) p2 = معالجة متعددة. العملية (الهدف = عامل 2) # عمليات البدء p1.start () p2.start () # معرفات العملية طباعة ('معرف من عملية p1: {} '. format (p1.pid)) print (' ID of process p2: {} '. format (p2.pid)) # wait حتى تنتهي العمليات p1.join () p2.join () # انتهت كلتا العمليتين من الطباعة ('انتهت كلتا العمليتين من التنفيذ!') # تحقق مما إذا كانت العمليات قيد التنفيذ ('العملية p1 حية: {}'. تنسيق (p1.is_alive ())) طباعة ('العملية p2 على قيد الحياة: {} تنسيق. (p2.is_alive ()))

انتاج |

معرف العملية الرئيسية: 18938

معرف عامل تشغيل العملية 1: 18939

معرف عامل تشغيل العملية 2: 18940

معرف العملية p1: 18939

معرف العملية p2: 18940

انتهت كلتا العمليتين من التنفيذ!

العملية p1 على قيد الحياة: خطأ

العملية p2 على قيد الحياة: خطأ

ما هي طريقة جافا سكريبت

لاحظ في البرنامج أعلاه أن كلا من معالجة p1 و p2 تعمل بشكل مستقل عن ذاكرتهم الفردية. بمجرد الانتهاء من تنفيذ كلاهما ، يتم إنهاء البرنامج.

يقودنا هذا إلى نهاية هذا المقال حول المعالجة المتعددة في بايثون

للحصول على معرفة متعمقة حول Python مع تطبيقاتها المختلفة ، يمكنك ذلك للتدريب المباشر عبر الإنترنت مع دعم على مدار الساعة طوال أيام الأسبوع وإمكانية الوصول مدى الحياة.

لديك سؤال لنا؟ أذكرها في قسم التعليقات بالمقالة وسنعاود الاتصال بك.