• python 百万级别类实例实现节省内存


    # 案例:
    '''
    某网络游戏中,定义了玩家类Player(id,name,status)
    每当有一个玩家,就会在服务器创建一个Player实例
    当在线人数过多时,将产生大量实例(百万级别),消耗内存
    
    如何降低这些实例的大量实例的内存开销?
    
    解决方案:定义类的 __slots__属性,它是用来声明实例属性名字的列表
    '''
    
    
    class Player(object):
        __slots__ = ['name', 'id', 'status']
    
        def __init__(self, name, id, status):
            self.name = name
            self.id = id
            self.status = status
    
        def test(self):
            print(self.name)
            print(self.id)
            print(self.status)
    
    
    class Player1(object):
        def __init__(self, name, id, status):
            self.name = name
            self.id = id
            self.status = status
    
    
    p = Player("Li", '111', '10')
    p.test()
    p1 = Player1("Li", '111', '10')
    print(dir(p1))
    print(dir(p))
    print(set(dir(p1)) - set(dir(p)))  # 求两个实例的差集   p1比p多了  {'__weakref__', '__dict__'}      其__dict__占用大量内存
    import sys
    
    print(sys.getsizeof(p1.__dict__))  # 打印出p1.__dict__占用内存大小
    """
    实例p1可以动态生成属性,而p则不行,实现阻止动态绑定
    """
    p1.x = 1
    p1.__dict__['y'] = 2
    print(p1.__dict__)
    # p.x = 1
    # p.__dict__['y'] = 2
  • 相关阅读:
    Python利用Remove.bg接口自动消除图片背景
    解决ajxa跨域问题
    CentOS7 修改静态IP
    CentOS下 安装composer 与tp5.1
    centon 安装php-fpm+Nginx
    win10 安装selenium和使用
    Scrapy 爬虫框架入门
    Python 异常处理
    selenium和phantomjs的介绍
    MongoDB入门
  • 原文地址:https://www.cnblogs.com/jum-bolg/p/10965372.html
Copyright © 2020-2023  润新知