"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > متى يتم استخدام الخيوط مقابل العمليات في بايثون: دليل لاختيار الأداة المناسبة للمهمة؟

متى يتم استخدام الخيوط مقابل العمليات في بايثون: دليل لاختيار الأداة المناسبة للمهمة؟

تم النشر بتاريخ 2024-11-11
تصفح:295

When to Use Threads vs. Processes in Python: A Guide to Choosing the Right Tool for the Job?

الخيوط مقابل المعالجة المتعددة: الاختلافات وحالات الاستخدام

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

المفاهيم الأساسية

  • المواضيع: يتم إنشاؤها ضمن عملية واحدة وتشترك في نفس مساحة الذاكرة.
  • العمليات:
  • كيانات معزولة لها مساحة ذاكرة خاصة بها وتتفاعل من خلال الاتصال بين العمليات (IPC).
مشاركة البيانات

يمكن للخيوط الوصول إلى البيانات المشتركة وتعديلها، بينما تتطلب العمليات آليات واضحة لتبادل البيانات.

  • GIL (قفل المترجم العالمي)

يحتوي مترجم CPython الخاص بـ CPython على GIL الذي يمنع سلاسل رسائل متعددة من تنفيذ كود Python في وقت واحد.

    يمكن أن يعيق هذا القيد التنفيذ المتوازي، خاصة في المهام المرتبطة بوحدة المعالجة المركزية.
  • لا تخضع العمليات لـ GIL.
  • إدارة الموارد

يعد إنشاء سلاسل الرسائل وتدميرها أمرًا ضروريًا أرخص وأسرع من العمليات.

    يمكن أن تستهلك العمليات موارد كبيرة عند استخدامها بأعداد كبيرة أو عند الاتصال بشكل متكرر.
  • متى يتم استخدام المواضيع والعمليات

المواضيع:
    مناسبة للمهام التي:
  • تتطلب استجابة في الوقت الفعلي (على سبيل المثال، التعامل مع أحداث واجهة المستخدم الرسومية) لا تنطوي على عمليات حسابية ثقيلة

      يمكن بسهولة مشاركة البيانات
    • العمليات:
    • يفضل للمهام التي:
  • تستهلك وحدة المعالجة المركزية بشكل مكثف
  • تتطلب ذاكرة كبيرةتتضمن بيانات حساسة أو معزولة

      ليست حساسة للوقت
    • قوائم الانتظار للتنفيذ المتوازي
    يمكنك استخدام قوائم الانتظار (على سبيل المثال، Threading.Queue أو multiprocessing.Queue) لإدارة مجموعة من الوظائف والحد من عدد المهام المنفذة بشكل متزامن:

# إنشاء قائمة انتظار قائمة الانتظار = المعالجة المتعددة. قائمة الانتظار () # تهيئة تجمع العمليات تجمع = معالجة متعددة. تجمع (4) # إرسال الوظائف إلى المجمع بالنسبة إلى job_argument في job_list: pool.apply_async(job, (job_argument,), رد الاتصال=queue.put) # استرداد النتائج من قائمة الانتظار بينما لا قائمة الانتظار. فارغة (): النتيجة = قائمة الانتظار. الحصول على () # نتيجة العملية...

موارد إضافية

# Create a queue
queue = multiprocessing.Queue()

# Initialize a process pool
pool = multiprocessing.Pool(4)

# Submit jobs to the pool
for job_argument in job_list:
    pool.apply_async(job, (job_argument,), callback=queue.put)

# Retrieve results from the queue
while not queue.empty():
    result = queue.get()
    # Process result...
[استخدام وحدة Concurrent.futures في بايثون](https://realpython.com/concurrent-futures-in-python/)

[التزامن والتوازي في بايثون](https: //www.coursera.org/specializations/python-concurrency-parallelism)

أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3