(九)python設計モード---亨元モード


背景
  • オブジェクトの作成は、一定のオーバーヘッドを伴う遊びであり、パフォーマンスの問題にも直面しなければなりません.大量の同時セグメントが併存するオブジェクトを作成する必要がある場合、リソースの制限が問題になります.
  • は、理論的には、オブジェクトを作成するときに追加のメモリを割り当てる必要があるためです.現在のオペレーティングシステムのメモリ管理の多くは仮想メモリの理論に基づいており、理論的にはハードウェアのメモリ容量を超えるメモリ空間があります.しかし、実際のシステムでは、すべての物理メモリが消費されると、メモリページを2次ストレージデバイスに置き換え始め、ハードディスク(HDD)になることが多い.このようなメモリの読み書き性能は、SSDが現れても受け入れられないことが多い.
  • 次に計算性能も考慮すべき点
  • 亨元設計モードはデータ共有を導入することによって類似オブジェクトのメモリを最小化し、性能を向上させる.これは最適化のための設計モードであり、共有オブジェクトデータ
  • に注目する.
    対象となる問題
  • 類似オブジェクト
  • を多数使用する必要がある.
  • オブジェクトが多すぎるため、ストレージと計算のコストが大きすぎます.
  • 類似オブジェクトの一意性属性は重要でなくなる
  • ≪インスタンス|Instance|emdw≫
  • 統計データは、それぞれ棒グラフ、折れ線グラフ、柱状図の処理
  • である.
    # -*-encoding:utf8 -*-
    import random
    from enum import Enum
    
    
    class StatisticUnit(Enum):
        bar = 1
        line = 2
        column = 3
    
    
    class StatisticHandle(object):
    
        pool = dict()
    
        def __new__(cls, statistic_type, *args, **kwargs):
            obj = cls.pool.get(statistic_type, None)
            if not obj:
                obj = object.__new__(cls)
                cls.pool[statistic_type] = obj
                obj.statistic_type = statistic_type
            return obj
    
        def gen_render_obj(self, height):
            #      。。。
            print(f'at obj id: {id(self)}, gener render obj of {self.statistic_type.name} with height: {height}  ')
            return self.statistic_type.value, height
    
    if __name__ == '__main__':
        import time
        while True:
            __statistic_type = random.choice([StatisticUnit.bar, StatisticUnit.line, StatisticUnit.column])
            __height = random.randrange(1, 100)
            # print(f'statistic_type: {__statistic_type}, height: {__height}')
            sh = StatisticHandle(__statistic_type)
            sh.gen_render_obj(__height)
            time.sleep(0.5)