اذهب إلى المحتوى

السؤال

نشر

في الوقت الحالي أنا أتعلم كيفية استخدام الـ threading  و multiprocessing  في بايثون لتشغيل عمليات معينة بالتوازي وتسريع الكود الخاص بي.

لكن لدي مشكلة في معرفة الفرق بين هذه المكتبات، ما الفرق بين الكائنين التاليين؟

threading.Thread() 

multiprocessing.Process()

متى أستعمل كلًا من مكتبة threading  أو multiprocessing؟

Recommended Posts

  • 2
نشر

ال multithreading ليست دوماً الحل الأفضل لتسريع البرنامج:
هناك عبء  overhead مرتبط بإدارة ال Threads، لذلك لايكون من الجيد استخدامها للمهام البسيطة (الغاية الأساسية هي السرعة في التنفيذ، لكن في هكذا حالات قد تكون النتائج سيئة أي قد يزداد زمن التنفيذ وهذا ما لانريده فنحن بالأساس نتجه لتحقيق الThreading لكي يقل زمن التنفيذ وليس العكس)
ال multithreading يزيد من تعقيد البرنامج ، مما يجعل تصحيح الأخطاء أكثر صعوبة.
ال multiprocessing:
هناك عبء مرتبط بها عندما يتعلق الأمر بعمليات الإخراج والإدخال.
لاتتم مشاركة الذاكرة بين ال subprocess حيث يكون لكل subprocess نسخة كاملة خاصة به من الذاكرة وهذا يشكل عبء Overhead بالنسبة للبرامج الأخرى.
إن الموديول multiprocessing يستخدم ال Processes أي أن التعليمة الثانية التي أشرت لها في كتابتك تقوم بإنشاء Processe  أما الموديول multithreading يستخدم ال Threads أي أن التعليمة الأولى التي أشرت لها تقوم بإنشاء Thread، والفرق الأساسي بينهم أن الأولى تستخدم ذاكرة منفصلة لكل subprocess (كما أشرت في الأعلى) بينما ال Threads تتشارك الذاكرة وبالتالي في ال multiprocessing لاخوف من حدوث حالات تلف البيانات أو التوقف التام deadlock بينما في ال multithreading فهذا وارد الحدوث.
متى نستخدم كل منها:
إذا كان البرنامج يحوي العديد من مهام الإدخال والإخراج أو استخدام الشبكة فيفضل استخدام ال threading لأنها سيترتب عليها overhead أقل من ال multiprocessing. أو إذا كان لديك GUI في برنامجك.
إذا كان برنامجك يحوي على  العديد من العمليات الحسابية "CPU bound" فيفضل التعامل مع ال multiprocessing.

  • 0
نشر

تتميز مكتبة threading بأنها خفيفة الوزن وتتشارك الذاكرة ومسؤولة عن واجهة المستخدم وسريعة الاستجابة ويتم استخدامها بشكل جيد للتطبيقات المرتبطة بالإدخال و الإخراج,
بينما مكتبة multiprocessing تستخدم  مساحة ذاكرة منفصلة وأنوية متعددة لوحدة المعالجة المركزية وهي أسهل بكثير في الاستخدام, يمكنك استخدام threading إذا كان البرنامج الخاص بك يحتوي على الكثير من عمليات الادخال والاخراج أو يستخدام الشبكة ويمكنك ويمكنك استخدام  multiprocessing إذا كان مرتبط بوحدة المعالجة المركزية واذا كان جهازك يحتوي على نوى متعددة

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...