Whatsup - לינוקס, תוכנה חופשית וקוד פתוח בעברית

תיכנות בלינוקס - לומד פייתון - מבקש הכוונה לגבי מיקבול

Anonymous - 13/02/2018 - 18:15
נושא ההודעה: לומד פייתון - מבקש הכוונה לגבי מיקבול
שלום
אשמח לעזרתכם
יש לי ניסיון של כמה שנים בלינוקס bash, perl
אני לומד פייתון ומנסה להעמיק לאט לאט את היכולות שלי
עברתי על התעוד של מקבול תהליכים בפייתון ברפרוף כאן:
https://docs.python.org/3.6/library/multiprocessing.html
קראתי כמה דוגמאות ברשת - ברוב המקרים משתמשים ב POOL שם ה API פשוט, קל ונח לשימוש.
אני רוצה להכיר ולהתנסות קצת יותר במיקבול.
האם אשמח להפנייה לתרגול בנושא ולהכוונה להסברים עם דוגמאות אינן משתמשות בPOOL.

אני רוצה להבין בין השאר:
1. האם שימוש במודול multiprocessing יכול לשפר ביצועים גם על מכונות וירטואליות בפעולות שאינן מערבות I/O
2. כללי אצבע לעבודה עם המודול:
* טיפול בשגיאות
* העברת מידע בין התהליכים
* שימוש באובייקטים משותפים לקריאה או לכתיבה.

עד כה הסתבכתי בעיקר במצב שבו רציתי להפעיל מתוך אובייקט מתודה של האובייקט בעזרת MAP.
ניסיתי להשתמש בitertools אבל קיבלתי הודעות שגיאה:
Can't pickle <type '
הפתרון היה להוציא את הלוגיקה לפונקציה חיצונית באותו המודול.
זה מעקף שנובע מחוסר הבנה שלי.
mksoft - 13/02/2018 - 20:00
נושא ההודעה:
קטעי קוד יעזרו.
Anonymous - 13/02/2018 - 23:48
נושא ההודעה:
אני מניח שאתה שואל לגבי הבעיה שעקפתי:

קוד:

from multiprocessing.pool import Pool
import requests



class testmp():

    def get_page(self,url):
        r = requests.get(url)
        return r

    def get_data(self,urls):
        p=Pool()
        gp =lambda u : self.get_page(u)
        requests_iter=p.map(gp , urls)
        return requests_iter




if __name__ == '__main__':
    t= testmp()
    boi_urls=[
        "http://www.boi.org.il/he/Markets/Documents/yazigmizt.xlsx",
        "http://www.boi.org.il/he/Markets/Documents/yaz0106.zip",
        "http://www.boi.org.il/he/Markets/Documents/yaz9296.zip"
    ]
    r_itr = t.get_data(urls=boi_urls)
    print (list(r_itr))


אבל יותר חשוב לי לראות ולקרוא קוד שלא עובד עם POOL ולקבל תשובות למה ששאלתי.
להבין מתי אני רוצה להשתמש בכל אחת מהאפשרויות.
mksoft - 14/02/2018 - 09:30
נושא ההודעה:
ראה פה לדוגמאות ללא Pool:
https://pymotw.com/3/multiprocessing/basics.html
כל הזמנים הם GMT + 2 שעות