python如何为创建大量实例节省内存


Posted in Python onMarch 20, 2018

python如何为创建大量实例节省内存,具体内容如下

案例:

某网络游戏中,定义了玩家类Player(id, name, status,....),每有一个在线玩家,在服务器程序内有一个Player的实例,当在线人数很多时,将产生大量实例(百万级别)

需求:

      

如何降低这些大量实例的内存开销?

如何做?

       首先要明白,python中的类可以动态的添加属性,实则在内存中有个__dict__方法维护了这种动态添加属性,它占有内存,把它关掉,不就达到省内存要求了?

#!/usr/bin/python3
 
import time
import sys
 
 
class Player(object):
  def __init__(self, id, name, status):
    self.id = id
    self.name = name
    self.status = status
 
if __name__ == '__main__':
  player_1 = Player(1, 'bei_bei', '上线')
  print(player_1.__dict__)
   
  print('_' * 100)
  # 动态装配属性
  player_1.money = 10000
  player_1.__dict__['time'] = time.time()
  print(player_1.__dict__)
  print(player_1.money, player_1.time)
   
  print('_' * 100)
  # 打印__dict__占用的内存空间
  print('dict方法占用内存:', sys.getsizeof(player_1.__dict__))
   
  print('_'*100)
  # 动态删除属性
  print(player_1.__dict__)
  del player_1.__dict__['time']
   
  del player_1.money
  print(player_1.__dict__)

通过__slots__属性,声明实例属性名字的列表

#!/usr/bin/python3
 
 
class Player(object):
  # 通过slots方法指定类的定长属性
  __slots__ = ['id', 'name', 'status']
   
  def __init__(self, id, name, status):
    self.id = id
    self.name = name
    self.status = status
 
 
if __name__ == '__main__':
  player_1 = Player(1, 'bei_bei', '上线')
  print(player_1.id, player_1.name, player_1.status)
   
  # 尝试输出__dict__属性,发现没有,就无法动态的装配类属性,达到省内存的目的
  try:
    print(player_1.__dict__)
  except Exception as e:
    print(e)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python实现根据主机名字获得所有ip地址的方法
Jun 28 Python
简单了解Python下用于监视文件系统的pyinotify包
Nov 13 Python
在Django同1个页面中的多表单处理详解
Jan 25 Python
python数据清洗系列之字符串处理详解
Feb 12 Python
Python中的pack和unpack的使用
Mar 12 Python
在Python中使用defaultdict初始化字典以及应用方法
Oct 31 Python
使用Python OpenCV为CNN增加图像样本的实现
Jun 10 Python
pybind11在Windows下的使用教程
Jul 04 Python
Python3标准库之dbm UNIX键-值数据库问题
Mar 24 Python
python实现扑克牌交互式界面发牌程序
Apr 22 Python
django 模型中的计算字段实例
May 19 Python
python super()函数的基本使用
Sep 10 Python
python如何对实例属性进行类型检查
Mar 20 #Python
python如何在循环引用中管理内存
Mar 20 #Python
Windows 7下Python Web环境搭建图文教程
Mar 20 #Python
Python中%是什么意思?python中百分号如何使用?
Mar 20 #Python
Python实现类似比特币的加密货币区块链的创建与交易实例
Mar 20 #Python
Django开发中复选框用法示例
Mar 20 #Python
python如何通过twisted实现数据库异步插入
Mar 20 #Python
You might like
我的论坛源代码(九)
2006/10/09 PHP
smarty模板局部缓存方法使用示例
2014/06/17 PHP
浅谈ThinkPHP的URL重写
2014/11/25 PHP
php计算多个集合的笛卡尔积实例详解
2017/02/16 PHP
PHP依赖注入(DI)和控制反转(IoC)详解
2017/06/12 PHP
PHP过滤器 filter_has_var() 函数用法实例分析
2020/04/23 PHP
javascript 自定义事件初探
2009/08/21 Javascript
jQuery获得内容和属性方法及示例
2013/12/02 Javascript
导入extjs、jquery 文件时$使用冲突问题解决方法
2014/01/14 Javascript
JavaScript中的typeof操作符用法实例
2014/04/05 Javascript
在JavaScript中构建ArrayList示例代码
2014/09/17 Javascript
Jquery 实现checkbox全选方法
2015/01/28 Javascript
如何实现chrome浏览器关闭页面时弹出“确定要离开此面吗?”
2015/03/05 Javascript
nodejs简单实现中英文翻译
2015/05/04 NodeJs
jquery实现浮动的侧栏实例
2015/06/25 Javascript
javascript中 try catch用法
2015/08/16 Javascript
javascript引用类型之时间Date和数组Array
2015/08/27 Javascript
AngularJS进行性能调优的7个建议
2015/12/28 Javascript
JS解决position:sticky的兼容性问题的方法
2017/10/17 Javascript
Bootstarp在pycharm中的安装及简单的使用方法
2019/04/19 Javascript
解决antd的Form组件setFieldsValue的警告问题
2020/10/29 Javascript
[14:25]教你分分钟做大人:主宰(HEROS)
2014/12/08 DOTA
Python闭包的两个注意事项(推荐)
2017/03/20 Python
Python 25行代码实现的RSA算法详解
2018/04/10 Python
Python除法之传统除法、Floor除法及真除法实例详解
2019/05/23 Python
Python OpenCV调用摄像头检测人脸并截图
2020/08/20 Python
解决Django中修改js css文件但浏览器无法及时与之改变的问题
2019/08/31 Python
python各种excel写入方式的速度对比
2020/11/10 Python
html5 兼容IE6结构的实现代码
2012/05/14 HTML / CSS
html5 跨文档消息传输示例探讨
2013/04/01 HTML / CSS
国家助学金获奖感言
2014/01/31 职场文书
两只小狮子教学反思
2014/02/05 职场文书
会计学生自我鉴定
2014/02/06 职场文书
群众路线批评与自我批评发言稿
2014/10/16 职场文书
县委务虚会发言材料
2014/10/20 职场文书
初中地理教学反思
2016/02/19 职场文书