הנחיות תרגיל מסכם 1
חלק א - בניית המחלקה DataBaseבחלק זה נגדיר ונבנה את המחלקה DataBase. מחלקה זו תהיה Module נפרד ב - Python. יש לשמור את המחלקה בקובץ נפרד. ניתן להיעזר במצגת של עצמים ומחלקות משנה שעברה. המצגת מצורפת ל - Classroom. ההנחיות :למחלקה DataBase יהיו שתי תכונות :מומלץ שהמחלקה תירש את מודול object.תכונה ראשונה - המילון עצמו.תכונה שנייה - שם הקובץ אליו נבצע את תהליך ה - serialization.1. ממש את הפעולה הבונה במחלקה : הפעולה תיצור מילון ריק , ותאתחל את תכונת שם הקובץ , בשם הקובץ שהתקבלכפרמטר. כמו כן אם הקובץ כבר קיים - תתבצע טעינת המילון מהקובץ. להלן כותרת הפעולה :def _init_(self, file_name):2. ממש את פעולת הכתיבה במחלקה : הפעולה תקבל את המפתח של המילון ואת הערך , היא תוסיף את הפריטלמילוןותבצעserialization למילון. להלן כותרת הפעולה :def set_value(self, key, value):3. ממש את פעולת הקריאה במחלקה : הפעולה תקבל מפתח במילון , המילון יעבור תהליך שלdeserializationוהפעולהתחזיר את הערך השייך למפתח. להלן כותרת הפעולה :def get_value(self, key):"""return None if key doesn't exist"""4. ממש את פעולת הפלט המחזירה מחרוזת המתארת את המילון בשלמותו. רמז ! - שימו לב המילון עלול להיות במצב serialization. כותרת הפעולה :def _str_(self): חלק ב - בדיקה.בחלק זה נבדוק שאכן המחלקה DataBase פועלת כהלכה. 1. פתח קובץ חדש בשם checkDataBase2. כתוב תכנית קצרה , היוצרת עצם המכיל מילון , מוסיפה לו 5 פריטים , מדפיסה פריט אחד לפי ערךהמפתח שלו ,מדפיסה את המילון בשלמותוומדפיסה הודעהמתאימהאםהמפתח לאקיים.3. העלה את הקובץ שכתבת בפייתון - checkDataBase ל-Classwork. חלק ג - Threadsבחלק זה ניצור התנגשות בין תהליכי כתיבה וקריאה. על בסיס הקובץ checkDataBase פתח קובץ פייתון חדש בשם checkDataBaseWithThreads והוסף את הפעולות הבאות :1. כתוב 2 פעולות נפרדות המבצעות את אותה משימה: כל פעולה תבצע 10 פעמים - כתיבת ערך למילון, קריאתו והדפסתו. הערך יכול להיות זהה, אך המפתחות שונים. כותרות הפעולות : הפעולות יקבלו כפרמטר עצם מהמחלקה DataBase.def thread_worker1(db):def thread_worker2(db): שים לב 10 הערכים שיתווספו למילון בפעולה הראשונה יהיו שונים מעשרת הערכים שיתווספו למילון בפעולה השנייה. בתוך הפעולה עצמה ניתן להוסיף את אותם 10 ערכים. כמו כן שתי הפעולות יכתבו לאותם10 מפתחות.כדי לעזור לך לראות אי סנכרון / התנגשות יש להשתמש במודול logging של Python.מודול זה הוא מודול יומן של רישום אירועים שמתרחשים במחשב. מודול זה יאפשר לך לעקוב אחר התנהלות התהליכים בתרגיל שתכתוב.הסבר מפורט על השימוש במודול logging תוכל למצוא במדריך של Python.מדריך נוסף על השימוש ב - logging.התבוננו על השימוש ב - logging.debug.עדכן את הקובץ DataBase. הוסף את הפקודות הבאות:עבור הפעולה set_value: יש להוסיף כפקודה ראשונה את - logging.debug(f"set_value {(key,value)}") וכן להוסיף כפקודה האחרונהשל הפעולה את - logging.debug(f"Finished set_value {(key,value)}") בדומה עבור הפעולה get_value: יש להוסיף כפקודה ראשונה את - logging.debug(f"get_value {key}") ולפני return יש להוסיף את הפקודה - logging.debug(f"Finished get_value {(key,value)}")2. צור שני תהליכים (Threads) והפעל אותם , עקוב אחר הפלט עד אשר מתבצעת אי סנכרון / התנגשות בין שתי פעולות set או שתי פעולות get. לדוגמא הדפסה שנקבל כאשר יש אי סנכרון:[DEBUG] (thread_1 ) set_value(1,1)[DEBUG] (thread_2 ) set_value(1,2)[DEBUG] (thread_1 ) Finished set_value('1', '1')[DEBUG] (thread_2 ) Finished set_value('1', '2') כלומר set_value של הליך 1 לא סיים לבצע כתיבה (1,1) ונכנס הליך 2 וביצע כתיבה לאותו מפתח עם ערך אחר (1,2).3. העלה את הקבצים DataBase ו-checkDataBaseWithThreads ל - Classwork.