• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell
您的位置:首页 > 脚本语言 >python > 用Python中的__slots__缓存资源以节省内存开销的方法

用Python中的__slots__缓存资源以节省内存开销的方法

作者: 字体:[增加 减小] 来源:互联网

通过本文主要向大家介绍了python slots,节省开销,节省开销英文,slots,slots是什么意思等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

我们曾经提到,Oyster.com的Python web服务器怎样利用一个巨大的Python dicts(hash table),缓存大量的静态资源。我们最近在Image类中,用仅仅一行__slots__代码,让每个6G内存占用的服务进程(共4个),省出超过2G来。

这是其中一个服务器在部署代码前后的截图:

201542170958351.jpg (862×280)

我们alloc了大约一百万个类似如下class的实例:
 
class Image(object):
    def __init__(self, id, caption, url):
        self.id = id
        self.caption = caption
        self.url = url
        self._setup()
 
    # ... other methods ...

默认情况下,Python用一个dict来存储对象实例的属性。这在一般情况下还不错,而且非常灵活,乃至你在运行时可以随意设置新的属性。

但是,对一些在”编译”前就知道该有几个固定属性的小class来说,这个dict就有点浪费内存了。而当你把这个小浪费乘上一百万,那可就大不同了。在Python中,你可以在class中设置__slots__,它是一个包含这些固定的属性名的list。这样Python就不会再使用dict,而且只分配这些属性的空间。
 
class Image(object):
    __slots__ = ['id', 'caption', 'url']
 
    def __init__(self, id, caption, url):
        self.id = id
        self.caption = caption
        self.url = url
        self._setup()
 
    # ... other methods ...

你还可以用collections.namedtuple,它允许访问参数,但只占用一个tuple的空间。这跟__slots__类似。不过我总觉得继承一个namedtuple类很奇怪。另外,如果你需要自定义初始化,你应该重载__new__而不是__init__。

警告:不要贸然进行这个优化,把它用在所有地方。这种做法不利于代码维护,而且只有当你有数以千计的实例的时候才会有明显效果。

译注:作者在评论中关于”不利于代码维护“的说法:

webreac:我觉得__slots__关键字不只是速度优化(注:这里应该是内存优化),也是类字段名的一个可靠”文档“。这有利于代码维护。为什么你觉得它不好?

Ben Hoyt(作者):有趣的说法——我不确定应不应该把__slots__作为文档。不过的确是不错的注意。我之前这么说的原因是,你需要对字段名”定义“两次(不够DRY)。namedtuple也类似。

</div>

您可能想查找下面的文章:

  • python中__slots__用法实例
  • 在Python中使用__slots__方法的详细教程
  • 用Python中的__slots__缓存资源以节省内存开销的方法
  • python中的__slots__使用示例
  • Python中的__SLOTS__属性使用示例

相关文章

  • Python 搭建Web站点之Web服务器与Web框架
  • Python比较两个图片相似度的方法
  • 总结网络IO模型与select模型的Python实例讲解
  • Python简单进程锁代码实例
  • python实现将英文单词表示的数字转换成阿拉伯数字的方法
  • 浅谈插入排序算法在Python程序中的实现及简单改进
  • 详细介绍Python的鸭子类型
  • 使用python调用zxing库生成二维码图片详解
  • Python实现将数据库一键导出为Excel表格的实例
  • python中split方法用法分析

文章分类

  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell

最近更新的内容

    • 在Lighttpd服务器中运行Django应用的方法
    • Linux下将Python的Django项目部署到Apache服务器
    • Python爬虫辅助利器PyQuery模块的安装使用攻略
    • Python的time模块中的常用方法整理
    • python获取局域网占带宽最大3个ip的方法
    • python实现的AES双向对称加密解密与用法分析
    • python判断端口是否打开的实现代码
    • python获取本机外网ip的方法
    • 利用Python获取赶集网招聘信息前篇
    • python删除指定类型(或非指定)的文件实例详解

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有