נפתרה: מפה מרובת עיבודים

ריבוי עיבודים היא טכניקה פופולרית בתכנות Python המאפשרת לך להריץ מספר תהליכים במקביל, מה שגורם לרוב לשיפורי ביצועים ושימוש יעיל יותר במשאבי המערכת. מאמר זה צולל לתוך השימוש ב- עיבוד רב ספרייה ב-Python, המתמקדת במיוחד ב- מַפָּה פוּנקצִיָה. פונקציית המפה מאפשרת לך להחיל פונקציה על כל פריט באיטרציה, כגון רשימה, ולהחזיר רשימה חדשה עם התוצאות. על ידי מינוף ריבוי עיבודים, אנו יכולים להקביל תהליך זה ליעילות רבה יותר ומדרגיות.

במאמר זה, נחקור את הבעיה שעבורה ריבוי עיבוד עם פונקציית מפה יכול להוות פתרון מצוין, נדון בספריות ובפונקציות הרלוונטיות, נספק הסבר שלב אחר שלב על הקוד, ונעמיק בנושאים קשורים הנבנים על עמוד השדרה. של ריבוי עיבודים ופונקציית המפה.

מפת ריבוי עיבודים: הבעיה והפתרון

הבעיה שאנו שואפים לפתור היא לשפר את הביצועים והיעילות של החלת פונקציה על כל פריט ב-Iterable גדול, כגון רשימה, tuple או כל אובייקט אחר שתומך באיטרציה. כאשר מתמודדים עם משימות כאלה, השימוש בפונקציית המפה המובנית או הבנת הרשימה עשוי להיות איטי ולא יעיל למדי.

הפתרון הוא להשתמש בספריית ריבוי העיבודים ב-Python, במיוחד, את ברכה הכיתה שלה מַפָּה שיטה. על ידי שימוש ב multiprocessing Pool.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)
  1. ראשית, ייבא את ה עיבוד רב מודול, המכיל את הכלים הדרושים לניצול עיבוד מקביל ב- Python.
  2. צור פונקציה בשם מרובע שפשוט ישן למשך חצי שנייה ואז מחזיר את הריבוע של ארגומנט הקלט שלו. פונקציה זו מדמה חישוב שלוקח זמן סביר להשלמתו.
  3. צור רשימה בשם מספרים, המכיל מספרים שלמים מ-0 עד 9 (כולל).
  4. אתחל א ברכה אובייקט ממודול ריבוי עיבודים. אובייקט ה-Pool משמש כאמצעי לניהול תהליכי העבודה שבהם תשתמש כדי להקביל את המשימות שלך.
  5. התקשר מַפָּה שיטה על חפץ הבריכה, ועובר ב מרובע פונקציה ו מספרים רשימה. לאחר מכן, שיטת המפה מיישמת את פונקציית הריבוע על כל פריט ברשימת המספרים במקביל, תוך שימוש בתהליכי העבודה הזמינים במאגר.
  6. הדפס את הרשימה המתקבלת של squared_numbers, שאמורה להכיל את הערכים בריבוע מרשימת המספרים.

ספריית Python Multiprocessing

הפיתון עיבוד רב הספרייה מספקת אמצעי אינטואיטיבי ליישום מקביליות בתוכנית שלך. זה מסווה חלק מהמורכבות הקשורה בדרך כלל לתכנות מקביל על ידי הצעת הפשטות ברמה גבוהה כמו ברכה. מחלקת ה-Pool מפשטת את חלוקת העבודה על פני מספר תהליכים, ומאפשרת למשתמש לחוות את היתרונות של עיבוד מקביל במינימום טרחה.

Python Itertools Module ופונקציות קשורות

בעוד ש-multiprocessing הוא פתרון מצוין למשימות מקבילות רבות, ראוי להזכיר ש-Python מספקת גם ספריות וכלים אחרים הנותנים מענה לצרכים דומים. מודול itertools, למשל, מציע שפע של פונקציות הפועלות על איטרבלים, לרוב ביעילות משופרת. כמה פונקציות itertools כמו imap() ו imap_unordered() יכול להקביל את התהליך של החלת פונקציה על איטרציה. עם זאת, חשוב לציין ש-itertools מתמקדת בעיקר בפתרונות מבוססי איטרטור, בעוד שספריית ריבוי העיבודים מציעה גישה מקיפה יותר לקביליות, ומספקת כלים ויכולות נוספות מעבר לפונקציות דמויות מפה.

הודעות קשורות:

השאירו תגובה