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函数的周期性执行实现方法
Aug 13 Python
Python的时间模块datetime详解
Apr 17 Python
python+selenium+autoit实现文件上传功能
Aug 23 Python
Python之文字转图片方法
May 10 Python
spark: RDD与DataFrame之间的相互转换方法
Jun 07 Python
在python下读取并展示raw格式的图片实例
Jan 24 Python
Django框架实现的普通登录案例【使用POST方法】
May 15 Python
Django REST Framework序列化外键获取外键的值方法
Jul 26 Python
Python while循环使用else语句代码实例
Feb 07 Python
numpy中生成随机数的几种常用函数(小结)
Aug 18 Python
python与c语言的语法有哪些不一样的
Sep 13 Python
微软开源最强Python自动化神器Playwright(不用写一行代码)
Jan 05 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初学者写及时补给skype用户充话费的小程序
2008/11/02 PHP
php处理restful请求的路由类分享
2014/02/27 PHP
Laravel框架路由配置总结、设置技巧大全
2014/09/03 PHP
PHP框架自动加载类文件原理详解
2017/06/06 PHP
php实现支持中文的文件下载功能示例
2017/08/30 PHP
jQuery去掉字符串起始和结尾的空格(多种方法实现)
2013/04/01 Javascript
jquery ajax同步异步的执行最终解决方案
2013/04/26 Javascript
DIV始终居中的js代码
2014/02/17 Javascript
使用Node.js实现一个简单的FastCGI服务器实例
2014/06/09 Javascript
Js实现无刷新删除内容
2015/04/29 Javascript
JavaScript 数组中最大最小值
2016/06/05 Javascript
第八篇Bootstrap下拉菜单实例代码
2016/06/21 Javascript
jQuery实现div横向拖拽排序的简单实例
2016/07/13 Javascript
jQuery 操作input中radio的技巧
2016/07/18 Javascript
JS判断键盘是否按的回车键并触发指定按钮点击操作的方法
2017/02/13 Javascript
微信小程序日历组件calendar详解及实例
2017/06/08 Javascript
vue实现密码显示隐藏切换功能
2018/02/23 Javascript
一次Webpack配置文件的分离实战记录
2018/11/30 Javascript
详解element-ui级联菜单(城市三级联动菜单)和回显问题
2019/10/02 Javascript
vue项目中openlayers绘制行政区划
2020/12/24 Vue.js
[00:29]2019完美世界全国高校联赛(秋季赛)总决赛海口落幕
2019/12/10 DOTA
python实现的简单文本类游戏实例
2015/04/28 Python
利用Python爬取微博数据生成词云图片实例代码
2017/08/31 Python
PyTorch快速搭建神经网络及其保存提取方法详解
2018/04/28 Python
Pycharm之快速定位到某行快捷键的方法
2019/01/20 Python
Python读取指定日期邮件的实例
2019/02/01 Python
django框架使用方法详解
2019/07/18 Python
英国最受欢迎的价格比较网站之一:MoneySuperMarket
2018/12/19 全球购物
皇家阿尔伯特瓷器美国官网:Royal Albert美国
2020/02/16 全球购物
国贸专业个人求职信分享
2013/12/04 职场文书
学习两会精神心得范文
2014/03/17 职场文书
小学教师培训方案
2014/06/09 职场文书
英语教师求职信
2014/06/16 职场文书
庆祝教师节演讲稿
2014/09/03 职场文书
检举信的写法
2019/04/10 职场文书
关于销售人员的年终工作总结要点
2019/08/15 职场文书