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 def函数的定义、使用及参数传递实现代码
Aug 10 Python
Python验证企业工商注册码
Oct 25 Python
Python中functools模块的常用函数解析
Jun 30 Python
Python下的Softmax回归函数的实现方法(推荐)
Jan 26 Python
详谈Pandas中iloc和loc以及ix的区别
Jun 08 Python
Python Pillow Image Invert
Jan 22 Python
anaconda中更改python版本的方法步骤
Jul 14 Python
pygame实现俄罗斯方块游戏(对战篇1)
Oct 29 Python
TensorFlow tensor的拼接实例
Jan 19 Python
浅谈tensorflow 中tf.concat()的使用
Feb 07 Python
使用PyCharm官方中文语言包汉化PyCharm
Nov 18 Python
Python将CSV文件转化为HTML文件的操作方法
Jun 30 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脚本数据库功能详解(上)
2006/10/09 PHP
PHP新手上路(十一)
2006/10/09 PHP
ThinkPHP CURD方法之order方法详解
2014/06/18 PHP
PHP中的替代语法简介
2014/08/22 PHP
基于PHP实现短信验证码接口(容联运通讯)
2016/09/06 PHP
php实现xml转换数组的方法示例
2017/02/03 PHP
PHP 类与构造函数解析
2017/02/06 PHP
laravel添加前台跳转成功页面示例
2019/10/22 PHP
IE和Firefox下event事件杂谈
2009/12/18 Javascript
Jquery调用webService远程访问出错的解决方法
2010/05/21 Javascript
Package.js  现代化的JavaScript项目make工具
2012/05/23 Javascript
javascript文件中引用依赖的js文件的方法
2014/03/17 Javascript
每天一篇javascript学习小结(Array数组)
2015/11/11 Javascript
在Web项目中引入Jquery插件报错的完美解决方案(图解)
2016/09/19 Javascript
js中编码函数:escape,encodeURI与encodeURIComponent详解
2017/03/21 Javascript
Vue.js实现实例搜索应用功能详细代码
2017/08/24 Javascript
AngularJS 的$timeout服务示例代码
2017/09/21 Javascript
原生JS实现Ajax跨域请求flask响应内容
2017/10/24 Javascript
解决vue中post方式提交数据后台无法接收的问题
2018/08/11 Javascript
Vue2.0 实现页面缓存和不缓存的方式
2019/11/12 Javascript
python中快速进行多个字符替换的方法小结
2016/12/15 Python
Python使用matplotlib绘制三维图形示例
2018/08/25 Python
django实现用户注册实例讲解
2019/10/30 Python
PyCharm汉化安装及永久激活详细教程(靠谱)
2020/01/16 Python
python实现门限回归方式
2020/02/29 Python
基于python tkinter的点名小程序功能的实例代码
2020/08/22 Python
法律专业自我鉴定
2013/10/03 职场文书
马智宇结婚主持词
2014/04/01 职场文书
小学生爱国演讲稿
2014/04/25 职场文书
《夕阳真美》教学反思
2014/04/27 职场文书
体育之星事迹材料
2014/05/11 职场文书
投标承诺书怎么写
2014/05/24 职场文书
小学生放飞梦想演讲稿
2014/08/26 职场文书
我为党旗添光彩演讲稿
2014/09/13 职场文书
县委党的群众路线教育实践活动工作情况报告
2014/10/25 职场文书
2014年应急工作总结
2014/12/11 职场文书