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中实现最小二乘法思路及实现代码
Jan 04 Python
利用Python批量提取Win10锁屏壁纸实战教程
Mar 27 Python
python读取图片并修改格式与大小的方法
Jul 24 Python
Python 实现取矩阵的部分列,保存为一个新的矩阵方法
Nov 14 Python
在Python中字典根据多项规则排序的方法
Jan 21 Python
Python模拟百度自动输入搜索功能的实例
Feb 14 Python
网易2016研发工程师编程题 奖学金(python)
Jun 19 Python
Flask框架学习笔记之表单基础介绍与表单提交方式
Aug 12 Python
关于tf.TFRecordReader()函数的用法解析
Feb 17 Python
PYcharm 激活方法(推荐)
Mar 23 Python
使用numpngw和matplotlib生成png动画的示例代码
Jan 24 Python
PyQt 如何创建自定义QWidget
Mar 24 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
php无序树实现方法
2015/07/28 PHP
laravel入门知识点整理
2020/09/15 PHP
Jquery动态进行图片缩略的原理及实现
2013/08/13 Javascript
node.js下when.js 的异步编程实践
2014/12/03 Javascript
Jquery实现地铁线路指示灯提示牌效果的方法
2015/03/02 Javascript
深入学习JavaScript对象
2015/10/13 Javascript
AngularJS初始化静态模板详解
2016/01/14 Javascript
微信小程序 实例应用(记账)详解
2016/09/28 Javascript
jQueryUI Datepicker组件设置日期高亮
2016/10/13 Javascript
使用AngularJS 跨站请求如何解决jsonp请求问题
2017/01/16 Javascript
ionic2懒加载配置详解
2017/09/01 Javascript
JavaScript 中的 this 简单规则
2017/09/19 Javascript
封装运动框架实战左右与上下滑动的焦点轮播图(实例)
2017/10/17 Javascript
mongoose设置unique不生效问题的解决及如何移除unique的限制
2017/11/07 Javascript
Vue下的国际化处理方法
2017/12/18 Javascript
解决node修改后需频繁手动重启的问题
2018/05/13 Javascript
Python中time模块和datetime模块的用法示例
2016/02/28 Python
Python3计算三角形的面积代码
2017/12/18 Python
python 实现多线程下载m3u8格式视频并使用fmmpeg合并
2019/11/15 Python
canvas探照灯效果的示例代码
2018/11/30 HTML / CSS
世界首屈一指的在线男士内衣权威:HisRoom
2017/08/05 全球购物
SOA面试题:如何在SOA中实现松耦合
2013/07/21 面试题
办公室文秘自我鉴定
2013/09/21 职场文书
大学生毕业自我鉴定
2013/11/06 职场文书
会计毕业生自荐信
2013/11/21 职场文书
集团公司人力资源部岗位职责
2014/01/03 职场文书
幼儿园家长会邀请函
2014/01/15 职场文书
校园文化建设方案
2014/02/03 职场文书
幼儿教师求职信
2014/05/24 职场文书
2015年护理工作总结范文
2015/04/03 职场文书
教师思想工作总结2015
2015/05/13 职场文书
民事申诉状范本
2015/05/20 职场文书
城南旧事电影观后感
2015/06/16 职场文书
大学生安全教育心得体会
2016/01/15 职场文书
教你用eclipse连接mysql数据库
2021/04/22 MySQL
Elasticsearch 配置详解
2022/04/19 Java/Android