דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. משתנים יציבים שעלולים להשתנות מידי פעם. איך הדרך הנכונה להגדיר אותם?

משתנים יציבים שעלולים להשתנות מידי פעם. איך הדרך הנכונה להגדיר אותם?

מתוזמן נעוץ נעול הועבר תכנות
12 פוסטים 4 כותבים 269 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • צבי-שצ מחובר
    צבי-שצ מחובר
    צבי-ש
    כתב ב נערך לאחרונה על ידי
    #1

    אני באמצע פרויקט שירוץ בעז״ה על docker
    העניין הוא שאני רוצה לערוך שינויים באמצע דרך אתר חיצוני.

    אז זה מתחלק לשניים.

    1. פרטים שלא משתנים כמעט (כמו מספר מערכת וסיסמה בימות המשיח שממנו אני מוציא את השיחות, וכן הגדרות מערכת שכמעט ולא משתנות.)
    2. פרטים שעשויים להתעדכן בתדירות גבוהה יותר (כגון רשימת הערים שיכולות להצטרף לפרויקט, השעות בהם זה ״לילה״ ואני לא שולח שם צינתוק, או שעות שזה שבת, ואני לא שולח )

    העניין הוא שכשמעדכנים את זה, זה חייב להשתנות בקוד באותו רגע.
    חשבתי על 3 פתרונות ואשמח לדעת מה עדיף.

    1. שמירה במסד נתונים , וכל פעם לעשות קריאה מחדש (מאות/אלפי קריאות ביום לsqlite)

    2 קובץ .env ששם להכניס את הכל, ולקרוא לו כל פעם , ואותו לערוך (כמו המסד נתונים רק בקובץ שזה קריאה יותר זריזה, ופחות כבדה.)
    3 מסד נתונים/ קובץ, אבל לא לקרוא להם כל פעם, אלא בתחילת הקוד לאתחל את המשתנים, ואם יש שינוי, אני יקריס את הדוקר, ויעלה אותו שוב.
    הפרויקט מריץ flask, ולכן אם אני טוען מראש משהו מלפני שמתחיל האפליקציה של flask עצמה, הוא לא יטען אותו בכל ריצה מחדש אלא רק באיתחול.

    נראה לי ש 2 בכל מקרה עדיף על 1 כי זה פחות עומס על השרת.

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

    אולי צריך לשלב את שתי הצורות בין הדברים שכמעט ולא מתעדכנים לבין הדברים שמתעדכנים יותר הרבה פעמים?

    לכל דרך יש פה מעלות וחסרונות, אשמח לשמוע מה עדיף.

    או שבכלל יש דרך 4 שחברי הפורום יוכלו להחכים אותי בה?

    הקוד כתוב בפייתון. והמסד נתונים הוא sqlite

    כיף לגלות דברים חדשים.
    חוק ה-50-50-90: בכל פעם שיש סיכוי של 50-50 שמשהו יעבוד, יש סיכוי של 90 אחוז שהוא לא. מקור

    yossizY תגובה 1 תגובה אחרונה
    0
    • yossizY מנותק
      yossizY מנותק
      yossiz
      השיב לצבי-ש ב נערך לאחרונה על ידי
      #2

      @צבי-ש כתב במשתנים יציבים שעלולים להשתנות מידי פעם. איך הדרך הנכונה להגדיר אותם?:

      מאות/אלפי קריאות ביום לsqlite

      זה כלום (אבל גם הכלום הזה מיותר, עיין להלן)

      כמו המסד נתונים רק בקובץ שזה קריאה יותר זריזה, ופחות כבדה

      https://www.sqlite.org/fasterthanfs.html
      הם טוענים שהם יותר מהירים ממערכת הקבצים
      אבל בסדר גודל שלך ההבדל הוא אינפיניטסימלי (ובעברית: לא רלוונטי כלל)

      או שבכלל יש דרך 4 שחברי הפורום יוכלו להחכים אותי בה?

      סתם מחשבה שעולה לי, תוכל לעשות פוקנציה שמרעננת את ההגדרות מקובץ ההגדרות או מסד הנתונים, איזה מהם שיהיה, לא משנה, ותעשה URL בשרת שקריאה אליו יפעיל את הפוקנציה

      📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

      צבי-שצ תגובה 1 תגובה אחרונה
      4
      • צבי-שצ מחובר
        צבי-שצ מחובר
        צבי-ש
        השיב לyossiz ב נערך לאחרונה על ידי צבי-ש
        #3

        @yossiz כתב במשתנים יציבים שעלולים להשתנות מידי פעם. איך הדרך הנכונה להגדיר אותם?:

        סתם מחשבה שעולה לי, תוכל לעשות פוקנציה שמרעננת את ההגדרות מקובץ ההגדרות או מסד הנתונים, איזה מהם שיהיה, לא משנה, ותעשה URL בשרת שקריאה אליו יפעיל את הפוקנציה

        את זה ניסתי להגדיר בלשוני כאן

        @צבי-ש כתב במשתנים יציבים שעלולים להשתנות מידי פעם. איך הדרך הנכונה להגדיר אותם?:

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

        אבל איך אני יכול לרענן את ההגדרות?
        ההגדרות הם במשתנים,אני פשוט יגדיר אותם מחדש?

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

        @yossiz כתב במשתנים יציבים שעלולים להשתנות מידי פעם. איך הדרך הנכונה להגדיר אותם?:

        הם טוענים שהם יותר מהירים ממערכת הקבצים

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

        כיף לגלות דברים חדשים.
        חוק ה-50-50-90: בכל פעם שיש סיכוי של 50-50 שמשהו יעבוד, יש סיכוי של 90 אחוז שהוא לא. מקור

        yossizY תגובה 1 תגובה אחרונה
        0
        • yossizY מנותק
          yossizY מנותק
          yossiz
          השיב לצבי-ש ב נערך לאחרונה על ידי yossiz
          #4

          @צבי-ש כתב במשתנים יציבים שעלולים להשתנות מידי פעם. איך הדרך הנכונה להגדיר אותם?:

          את זה ניסתי להגדיר בלשוני כאן
          @צבי-ש כתב במשתנים יציבים שעלולים להשתנות מידי פעם. איך הדרך הנכונה להגדיר אותם?:

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

          האמת שלא הבנתי בדיוק את כוונתך בשורה זו:

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

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

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

          כן, בדיוק כך

          זה לא יהיה מוגבל רק לתוך הפונקציה ההגדרה של המשתנים?

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

          גוט שאבעס 🙂

          📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

          צבי-שצ תגובה 1 תגובה אחרונה
          3
          • צבי-שצ מחובר
            צבי-שצ מחובר
            צבי-ש
            השיב לyossiz ב נערך לאחרונה על ידי צבי-ש
            #5

            @yossiz כתב במשתנים יציבים שעלולים להשתנות מידי פעם. איך הדרך הנכונה להגדיר אותם?:

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

            אבל אם הפונקציה תגדיר אותם מחדש ההגדרה לא יהיה שייך לפונקציה עצמה?
            הוא יצא גם לסקופ?

            @yossiz כתב במשתנים יציבים שעלולים להשתנות מידי פעם. איך הדרך הנכונה להגדיר אותם?:

            גוט שאבעס

            גוטע וואך

            כיף לגלות דברים חדשים.
            חוק ה-50-50-90: בכל פעם שיש סיכוי של 50-50 שמשהו יעבוד, יש סיכוי של 90 אחוז שהוא לא. מקור

            yossizY תגובה 1 תגובה אחרונה
            0
            • yossizY מנותק
              yossizY מנותק
              yossiz
              השיב לצבי-ש ב נערך לאחרונה על ידי yossiz
              #6

              @צבי-ש אביא לך דוגמה:
              קובץ settings.py

              _settings = db.get_settings()
              
              def get(setting):
                  return _settings[setting]
              
              def refresh_settings():
                  global _settings
                  _settings = db.get_settings()
              

              קובץ callback.py

              import settings
              
              def calculate_callback_time(call_time):
                  night_hours = settings.get("night_hours")
                  return ... # your logic
              

              📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

              צבי-שצ A 2 תגובות תגובה אחרונה
              3
              • צבי-שצ מחובר
                צבי-שצ מחובר
                צבי-ש
                השיב לyossiz ב נערך לאחרונה על ידי
                #7

                @yossiz כתב במשתנים יציבים שעלולים להשתנות מידי פעם. איך הדרך הנכונה להגדיר אותם?:

                @צבי-ש אביא לך דוגמה:
                קובץ settings.py

                _settings = db.get_settings()
                
                def get(setting):
                    return _settings[setting]
                
                def refresh_settings():
                    global _settings
                    _settings = db.get_settings()
                

                קובץ callback.py

                import settings
                
                def calculate_callback_time(call_time):
                    night_hours = settings.get("night_hours")
                    return ... # your logic
                

                תודה רבה.

                כיף לגלות דברים חדשים.
                חוק ה-50-50-90: בכל פעם שיש סיכוי של 50-50 שמשהו יעבוד, יש סיכוי של 90 אחוז שהוא לא. מקור

                תגובה 1 תגובה אחרונה
                0
                • A מנותק
                  A מנותק
                  aaron
                  כתב ב נערך לאחרונה על ידי
                  #8

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

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

                  aaron.tchumim@gmail.com
                  Hetzner - שרתים וירטואליים ופיזיים במחירים מעולים (קישור שותפים)

                  ווצאפ API - תיעוד שירות API לא רשמי.

                  clickoneC תגובה 1 תגובה אחרונה
                  2
                  • A מנותק
                    A מנותק
                    aaron
                    השיב לyossiz ב נערך לאחרונה על ידי
                    #9

                    @yossiz כתב במשתנים יציבים שעלולים להשתנות מידי פעם. איך הדרך הנכונה להגדיר אותם?:

                    @צבי-ש אביא לך דוגמה:
                    קובץ settings.py

                    _settings = db.get_settings()
                    
                    def get(setting):
                        return _settings[setting]
                    
                    def refresh_settings():
                        global _settings
                        _settings = db.get_settings()
                    

                    קובץ callback.py

                    import settings
                    
                    def calculate_callback_time(call_time):
                        night_hours = settings.get("night_hours")
                        return ... # your logic
                    

                    https://github.com/dribia/driconfig
                    אני משתמש בזה במעל 90% מהפרויקטי פייתון שלי.
                    הרווח הגדול הוא שאתה מקבל ולידציה על ההגדרות + type hints

                    aaron.tchumim@gmail.com
                    Hetzner - שרתים וירטואליים ופיזיים במחירים מעולים (קישור שותפים)

                    ווצאפ API - תיעוד שירות API לא רשמי.

                    תגובה 1 תגובה אחרונה
                    1
                    • clickoneC מנותק
                      clickoneC מנותק
                      clickone
                      השיב לaaron ב נערך לאחרונה על ידי
                      #10

                      @aaron כתב במשתנים יציבים שעלולים להשתנות מידי פעם. איך הדרך הנכונה להגדיר אותם?:

                      ואחרי עריכה - ריסטארט לאפליקציה.

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

                      אני מאד מתחבר דווקא להצעה של @yossiz לעשות לינק שמרפרש את ההגדרות מהDB (או מכל מקור אחר)

                      אין טסט כמו פרודקשן.

                      המייל שלי urivpn@gmail.com

                      A תגובה 1 תגובה אחרונה
                      3
                      • A מנותק
                        A מנותק
                        aaron
                        השיב לclickone ב נערך לאחרונה על ידי
                        #11

                        @clickone כתב במשתנים יציבים שעלולים להשתנות מידי פעם. איך הדרך הנכונה להגדיר אותם?:

                        (או מכל מקור אחר)

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

                        תשתמש ב gunicorn כדי שיטפל ב graceful shutdown. וLB כדי שישאר סרוויס זמין בזמן הזה, אבל באמת לא חושב שזה חשוב לך עד כדי כך..

                        כמובן שלטעון מהDB זה גם אפשרות, לדעתי צריך לטפל בsignals בכל מקרה, כך שאין סיבה להשתמש בDB ולא בקובץ הגדרות.

                        aaron.tchumim@gmail.com
                        Hetzner - שרתים וירטואליים ופיזיים במחירים מעולים (קישור שותפים)

                        ווצאפ API - תיעוד שירות API לא רשמי.

                        A תגובה 1 תגובה אחרונה
                        0
                        • A מנותק
                          A מנותק
                          aaron
                          השיב לaaron ב נערך לאחרונה על ידי
                          #12

                          @aaron כתב במשתנים יציבים שעלולים להשתנות מידי פעם. איך הדרך הנכונה להגדיר אותם?:

                          @clickone כתב במשתנים יציבים שעלולים להשתנות מידי פעם. איך הדרך הנכונה להגדיר אותם?:

                          (או מכל מקור אחר)

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

                          תשתמש ב gunicorn כדי שיטפל ב graceful shutdown. וLB כדי שישאר סרוויס זמין בזמן הזה, אבל באמת לא חושב שזה חשוב לך עד כדי כך..

                          כמובן שלטעון מהDB זה גם אפשרות, לדעתי צריך לטפל בsignals בכל מקרה, כך שאין סיבה להשתמש בDB ולא בקובץ הגדרות.

                          @צבי-ש כתב במשתנים יציבים שעלולים להשתנות מידי פעם. איך הדרך הנכונה להגדיר אותם?:

                          העניין הוא שאני רוצה לערוך שינויים באמצע דרך אתר חיצוני.

                          ככל שזה הסיבה, אז ודאי שלשמור בDB. אתה תחשוף API כדי לעדכן את המידע ובאותו קריאה גם לטעון את המידע החדש.

                          aaron.tchumim@gmail.com
                          Hetzner - שרתים וירטואליים ופיזיים במחירים מעולים (קישור שותפים)

                          ווצאפ API - תיעוד שירות API לא רשמי.

                          תגובה 1 תגובה אחרונה
                          0

                          בא תתחבר לדף היומי!
                          • התחברות

                          • אין לך חשבון עדיין? הרשמה

                          • התחברו או הירשמו כדי לחפש.
                          • פוסט ראשון
                            פוסט אחרון
                          0
                          • דף הבית
                          • קטגוריות
                          • פוסטים אחרונים
                          • משתמשים
                          • חיפוש
                          • חוקי הפורום