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实现list反转实例汇总
Nov 11 Python
Python中类型关系和继承关系实例详解
May 25 Python
python实现串口自动触发工作的示例
Jul 02 Python
python使用装饰器作日志处理的方法
Jul 11 Python
详解一种用django_cache实现分布式锁的方式
Sep 01 Python
PyTorch学习:动态图和静态图的例子
Jan 06 Python
python+selenium+PhantomJS抓取网页动态加载内容
Feb 25 Python
Python object类中的特殊方法代码讲解
Mar 06 Python
Python模拟登入的N种方式(建议收藏)
May 31 Python
Python小白垃圾回收机制入门
Jun 09 Python
python装饰器三种装饰模式的简单分析
Sep 04 Python
python和Appium的移动端多设备自动化测试框架
Apr 26 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实现多图上传(结合uploadify插件)思路分析
2016/11/30 PHP
laravel如何开启跨域功能示例详解
2017/08/31 PHP
javascript 实现父窗口引用弹出窗口的值的脚本
2007/08/07 Javascript
JavaScript 新手24条实用建议[TUTS+]
2009/06/21 Javascript
JavaScript Konami Code 实现代码
2009/07/29 Javascript
jQuery实现contains方法不区分大小写的方法
2015/02/13 Javascript
JavaScript给按钮绑定点击事件(onclick)的方法
2015/04/07 Javascript
举例简介AngularJS的内部语言环境
2015/06/17 Javascript
用js编写的简单的计算器代码程序
2015/08/04 Javascript
jQuery实现可高亮显示的二级CSS菜单效果
2015/09/01 Javascript
js实现iframe框架取值的方法(兼容IE,firefox,chrome等)
2015/11/26 Javascript
jQuery实现字体颜色渐变效果的方法
2017/03/29 jQuery
JS实现简单抖动效果
2017/06/01 Javascript
javaScript实现复选框全选反选事件详解
2020/11/20 Javascript
微信小程序上传图片功能(附后端代码)
2020/06/19 Javascript
vue 项目打包通过命令修改 vue-router 模式 修改 API 接口前缀
2018/06/13 Javascript
微信小程序自定义单项选择器样式
2019/07/25 Javascript
python实现中文输出的两种方法
2015/05/09 Python
python与C互相调用的方法详解
2017/07/14 Python
python list是否包含另一个list所有元素的实例
2018/05/04 Python
python3爬虫获取html内容及各属性值的方法
2018/12/17 Python
bluepy 一款python封装的BLE利器简单介绍
2019/06/25 Python
Django 404、500页面全局配置知识点详解
2020/03/10 Python
python 下划线的不同用法
2020/10/24 Python
使用BeautifulSoup4解析XML的方法小结
2020/12/07 Python
周仰杰(JIMMY CHOO)法国官方网站:闻名世界的鞋子品牌
2019/09/27 全球购物
职业教育毕业生求职信
2013/11/09 职场文书
煤矿机修工岗位职责
2014/02/07 职场文书
厂办主管岗位职责范本
2014/02/28 职场文书
大学军训感言1500字
2014/03/09 职场文书
学习十八大坚定理想信念心得体会
2014/03/11 职场文书
介绍信样本
2015/01/31 职场文书
西柏坡导游词
2015/02/05 职场文书
2015年后勤工作总结范文
2015/04/08 职场文书
党员转正意见怎么写
2015/06/03 职场文书
IDEA 链接Mysql数据库并执行查询操作的完整代码
2021/05/20 MySQL