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 相关文章推荐
gearman的安装启动及python API使用实例
Jul 08 Python
Python的for和break循环结构中使用else语句的技巧
May 24 Python
Python操作MySQL数据库的三种方法总结
Jan 30 Python
python爬虫的数据库连接问题【推荐】
Jun 25 Python
python文件拆分与重组实例
Dec 10 Python
Python mutiprocessing多线程池pool操作示例
Jan 30 Python
Python 3.6 中使用pdfminer解析pdf文件的实现
Sep 25 Python
Python多继承以及MRO顺序的使用
Nov 11 Python
python实现对变位词的判断方法
Apr 05 Python
用Python开发app后端有优势吗
Jun 29 Python
python如何利用traceback获取详细的异常信息
Jun 05 Python
Python开发简易五子棋小游戏
May 02 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操作符与控制结构代码
2011/12/30 PHP
php简单判断文本编码的方法
2015/07/30 PHP
PHP实现动态执行代码的方法
2016/03/25 PHP
Yii框架实现记录日志到自定义文件的方法
2017/05/23 PHP
PHP实现的mysql操作类【MySQL与MySQLi方式】
2017/10/07 PHP
PHP中数组转换为SimpleXML教程
2019/01/27 PHP
详解关于php的xdebug配置(编辑器vscode)
2019/01/29 PHP
提高Laravel应用性能方法详解
2019/06/24 PHP
jQuery实现异步获取json数据的2种方式
2014/08/29 Javascript
jQuery实现伸展与合拢panel的方法
2015/04/30 Javascript
详解jQuery向动态生成的内容添加事件响应jQuery live()方法
2015/11/02 Javascript
前端编码规范(3)JavaScript 开发规范
2017/01/21 Javascript
BootStrap selectpicker后台动态绑定数据
2017/06/01 Javascript
JavaScript循环遍历你会用哪些之小结篇
2018/09/28 Javascript
Node.js 的 GC 机制详解
2019/06/03 Javascript
简单了解JavaScript中的执行上下文和堆栈
2019/06/24 Javascript
vue 全局环境切换问题
2019/10/27 Javascript
Python工程师面试题 与Python Web相关
2016/01/14 Python
python 捕获shell脚本的输出结果实例
2017/01/04 Python
Python正则表达式匹配中文用法示例
2017/01/17 Python
Python使用sorted对字典的key或value排序
2018/11/15 Python
python 梯度法求解函数极值的实例
2019/07/10 Python
Opodo英国旅游网站:预订廉价航班、酒店和汽车租赁
2018/07/14 全球购物
Bose加拿大官方网站:美国知名音响品牌
2019/03/21 全球购物
大一学生假期实习的自我评价
2013/10/12 职场文书
大三在校生电子商务求职信
2013/10/29 职场文书
商务助理岗位职责
2013/11/13 职场文书
就业自荐信
2013/12/04 职场文书
老师对学生的评语
2014/04/18 职场文书
激励口号大全
2014/06/17 职场文书
中国梦演讲稿范文
2014/08/28 职场文书
医院反腐倡廉演讲稿
2014/09/16 职场文书
Nginx配置并兼容HTTP实现代码解析
2021/03/31 Servers
详解Nginx的超时keeplive_timeout配置步骤
2022/05/25 Servers
Spring JPA 增加字段执行异常问题及解决
2022/06/10 Java/Android
springboot实现string转json json里面带数组
2022/06/16 Java/Android