المعالجة المتعددة تقنية شائعة في برمجة بايثون، تُمكّنك من تشغيل عمليات متعددة في وقت واحد، مما يُحسّن الأداء ويُعزز استخدام موارد النظام. تتناول هذه المقالة استخدام مكتبة المعالجة المتعددة في بايثون، مع التركيز بشكل خاص على دالة map . تُتيح لك دالة map تطبيق دالة على كل عنصر في كائن قابل للتكرار، مثل قائمة، وإرجاع قائمة جديدة بالنتائج. من خلال الاستفادة من المعالجة المتعددة، يُمكننا موازاة هذه العملية لزيادة الكفاءة وقابلية التوسع.
في هذه المقالة، سوف نستكشف المشكلة التي يمكن أن تكون المعالجة المتعددة باستخدام وظيفة الخريطة حلاً ممتازًا لها، ونناقش المكتبات والوظائف ذات الصلة، ونقدم شرحًا خطوة بخطوة للكود، ونتعمق في الموضوعات ذات الصلة التي تعتمد على العمود الفقري المعالجة المتعددة ووظيفة الخريطة.
خريطة المعالجة المتعددة: المشكلة والحل
المشكلة التي نهدف إلى حلها هي تحسين أداء وكفاءة تطبيق دالة على كل عنصر في كائن قابل للتكرار كبير، مثل قائمة أو صف أو أي كائن آخر يدعم التكرار. عند مواجهة مثل هذه المهام، قد يكون استخدام وظيفة الخريطة المضمنة أو فهم القائمة بطيئًا وغير فعال.
يكمن الحل في استخدام مكتبة المعالجة المتعددة في بايثون، وتحديدًا فئة Pool ودالة map الخاصة بها . باستخدام دالة map() في مكتبة المعالجة المتعددة ، يمكننا توزيع تنفيذ دالتنا على عدة عمليات.
شرح المدونة خطوة بخطوة
دعونا نحلل الكود ونوضح كيفية استخدام وظيفة خريطة المعالجة المتعددة بشكل فعال:
import multiprocessing
import time
def square(n):
time.sleep(0.5)
return n * n
# Create the list of numbers
numbers = list(range(10))
# Initialize the multiprocessing Pool
pool = multiprocessing.Pool()
# Use the map function with multiple processes
squared_numbers = pool.map(square, numbers)
print(squared_numbers)
- أولاً ، قم باستيراد ملف المعالجة المتعددة الوحدة، التي تحتوي على الأدوات اللازمة لاستخدام المعالجة المتوازية في بايثون.
- قم بإنشاء وظيفة تسمى مربع الذي ينام لمدة نصف ثانية ثم يقوم بإرجاع مربع وسيطة الإدخال الخاصة به. تحاكي هذه الوظيفة عملية حسابية تستغرق وقتًا معقولاً لإكمالها.
- إنشاء قائمة تسمى أرقام، والذي يحتوي على أعداد صحيحة من 0 إلى 9 (ضمناً).
- تهيئة أ مسبح كائن من وحدة المعالجة المتعددة. يعمل كائن التجمع كوسيلة لإدارة العمليات المنفذة التي ستستخدمها لموازاة مهامك.
- اتصل ب رسم خريطة الطريقة على كائن التجمع، وتمريرها في مربع وظيفة و أرقام قائمة. تقوم طريقة الخريطة بعد ذلك بتطبيق الدالة المربعة على كل عنصر في قائمة الأرقام بشكل متزامن، باستخدام العمليات المنفذة المتوفرة في التجمع.
- قم بطباعة القائمة الناتجة من Squared_numbers، والتي يجب أن تحتوي على القيم المربعة من قائمة الأرقام.
مكتبة بايثون للمعالجة المتعددة
توفر مكتبة المعالجة المتعددة في بايثون وسيلة سهلة لتطبيق المعالجة المتوازية في برنامجك. فهي تُخفي بعض التعقيدات المرتبطة عادةً بالبرمجة المتوازية من خلال توفير تجريدات عالية المستوى مثل فئة Pool . تُبسط فئة Pool توزيع العمل على عمليات متعددة، مما يُمكّن المستخدم من تجربة مزايا المعالجة المتوازية بأقل جهد ممكن.
وحدة Python Itertools والوظائف ذات الصلة
على الرغم من أن المعالجة المتعددة تُعد حلاً ممتازاً للعديد من المهام المتوازية، تجدر الإشارة إلى أن بايثون توفر أيضاً مكتبات وأدوات أخرى تلبي احتياجات مماثلة. على سبيل المثال، توفر وحدة itertools مجموعة كبيرة من الدوال التي تعمل على الكائنات القابلة للتكرار، وغالباً ما تتميز بكفاءة محسّنة. بعض دوال itertools، مثل imap() و imap_unordered()، قادرة على موازاة عملية تطبيق دالة على كائن قابل للتكرار. مع ذلك، من المهم ملاحظة أن itertools تركز بشكل أساسي على الحلول القائمة على المُكرِّرات، بينما تقدم مكتبة المعالجة المتعددة نهجاً أكثر شمولاً للتوازي، موفرةً أدوات وقدرات إضافية تتجاوز الدوال الشبيهة بالخرائط.