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 12 Python
Python实现PS滤镜特效之扇形变换效果示例
Jan 26 Python
详解python3中zipfile模块用法
Jun 18 Python
Python3使用SMTP发送带附件邮件
Jun 16 Python
python实现三维拟合的方法
Dec 29 Python
Python lxml解析HTML并用xpath获取元素的方法
Jan 02 Python
详解python中list的使用
Mar 15 Python
python 在threading中如何处理主进程和子线程的关系
Apr 25 Python
Python3自定义http/https请求拦截mitmproxy脚本实例
May 11 Python
基于Python3读写INI配置文件过程解析
Jul 23 Python
Python连接Mysql进行增删改查的示例代码
Aug 03 Python
Python获取百度热搜的完整代码
Apr 07 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 文件类型判断代码
2009/03/13 PHP
php 使用post,get的一种简洁方式
2010/04/25 PHP
mayfish 数据入库验证代码
2010/04/30 PHP
php多层数组与对象的转换实例代码
2013/08/05 PHP
PHP用身份证号获取星座和生肖的方法
2013/11/07 PHP
自编函数解决pathinfo()函数处理中文问题
2014/11/03 PHP
PHP的cURL库简介及使用示例
2015/02/06 PHP
Apache无法自动跳转却显示目录的解决方法
2020/11/30 PHP
js查找某元素中的所有图片地址的方法
2014/01/16 Javascript
纯JavaScript实现获取onclick、onchange等事件的值
2014/12/29 Javascript
JS非Alert实现网页右下角“未读信息”效果弹窗
2015/09/26 Javascript
Javascript中Date类型和Math类型详解
2016/02/27 Javascript
利用jquery制作滚动到指定位置触发动画
2016/03/26 Javascript
jQuery解决IE6、7、8不能使用 JSON.stringify 函数的问题
2016/05/31 Javascript
完美实现js焦点轮播效果(一)
2017/03/07 Javascript
微信小程序访问node.js接口服务器搭建教程
2017/04/25 Javascript
解决微信二次分享不显示摘要和图片的问题
2017/08/18 Javascript
JS中关于正则的巧妙操作
2017/08/31 Javascript
微信小程序之判断页面滚动方向的示例代码
2018/08/30 Javascript
vue 本地环境跨域请求proxyTable的方法
2018/09/19 Javascript
Vue.js 事件修饰符的使用教程
2018/11/01 Javascript
javascript简单实现深浅拷贝过程详解
2019/10/08 Javascript
swiper自定义分页器的样式
2020/09/14 Javascript
Python编程实现两个文件夹里文件的对比功能示例【包含内容的对比】
2017/06/20 Python
django 发送手机验证码的示例代码
2018/04/25 Python
tensorflow saver 保存和恢复指定 tensor的实例讲解
2018/07/26 Python
使用python搭建服务器并实现Android端与之通信的方法
2019/06/28 Python
Django windows使用Apache实现部署流程解析
2020/10/12 Python
python 利用toapi库自动生成api
2020/10/19 Python
复古风格的女装和装饰品:ModCloth
2017/12/29 全球购物
运动会广播稿60字
2014/01/15 职场文书
2014全国两会学习心得体会2000字
2014/03/10 职场文书
2014年教育工作总结
2014/11/26 职场文书
优秀党员事迹材料
2014/12/18 职场文书
医德医风自我评价2015
2015/03/03 职场文书
法院执行局工作总结
2015/08/11 职场文书