python3 内存管理
怎么查找哪里存在内存泄露呢?武器就是两个库:gc、objgraph pip install psutil
pip install objgraph
pip install -U memory_profiler # https://github.com/fabianp/memory_profiler
python -m memory_profiler example.py # 如果在函数前面用装饰器@profile(),则不用加-m memory_profiler参数
print(gc.isenabled()) # 垃圾回收机制已打开
info = psutil.virtual_memory()
print('内存使用:', psutil.Process(os.getpid()).memory_info().rss)
print('总内存:', info.total/(1024*1024*1024))
print('内存占比:', info.percent)
# 当Python运行时,会记录其中分配对象(object allocation)和取消分配对象(object deallocation)的次数。当两者的差值高于某个阈值时,垃圾回收才会启动
# 可以通过gc模块的get_threshold()方法,查看该阈值;也可以通过gc中的set_threshold()方法重新设置;也可以手动启动垃圾回收,即使用gc.collect()
# Python将所有的对象分为0,1,2三代。
# 所有的新建对象都是0代对象。
# 当某一代对象经历过垃圾回收,依然存活,那么它就被归入下一代对象。
# 垃圾回收启动时,一定会扫描所有的0代对象。
# 如果0代经过一定次数垃圾回收,那么就启动对0代和1代的扫描清理。
# 当1代也经历了一定次数的垃圾回收后,那么会启动对0,1,2,即对所有对象进行扫描。
# get_threshold()返回的(700, 10, 10)返回的700是阈值,返回的两个10:每10次0代垃圾回收,会配合1次1代的垃圾回收;而每10次1代的垃圾回收,才会有1次的2代垃圾回收。
def limit_memory(maxsize):
try:
soft, hard = resource.getrlimit(resource.RLIMIT_AS)
except ValueError as err:
print(str(err)) # soft==-1 hard==-1 表示没有限制, 有值时单位是字节
#print(soft/1024, hard)
resource.setrlimit(resource.RLIMIT_AS, (maxsize, hard))
soft, hard = resource.getrlimit(resource.RLIMIT_AS)
print(soft, hard)
if __name__ == '__main__':
limit_memory(100)
ret = list()
try:
for index in range(1, 1000000):
ret.append(index)
except Exception as err:
print(str(err))
exit(-1)
python3 内存管理的更多相关文章
- 零基础学python-3.5 内存管理
* 变量无需事先声明 * 变量无需指定类型 * 程序猿不用关系内存管理 * 变量名会被回收 * del能够直接释放资源 1.python使用的是引用调用,而不是值调用,他使用的回收算法是引用计数算法, ...
- Day 5内存管理,定义变量
昨日内容回顾 python的2种执行方式 交互式 写一句翻译一句 优点:能及时发现bug,及时调试 缺点:关即消失,不能保存 命令行式 优点:可以永久保存 缺点:无法及时看到结果 python3 c: ...
- Python内存管理以及数据类型
一.内存管理 1.Cpython解释器的垃圾回收机制 什么是垃圾:当一个值身上没有绑定任何变量名(该值的引用计数=0)时,该值就是一个垃圾. Cpython解释器就会自动回收这样的垃圾. #引用计数增 ...
- 2-Python基础语法-内存管理-运算符-程序控制
目录 1 Python 基础语法 1.1 注释 1.2 缩进 1.3 续行 1.4 标识符 1.5 转义序列 1.6 数字 1.7 字符串 1.8 其他 2 Python 运算符 2.1 赋值运算符 ...
- Day 03 知识点[python程序运行的方式、变量、注释、内存管理、数据类型]
执行Python程序的两种方式 第一种:交互式,在cmd中运行 优点:调试程序方便,直接给出结果 缺点:无法保存,关掉cmd窗口数据就消失 第二种:命令行式通过cmd中输入Python3文本 优点:数 ...
- 002 python介绍/解释器安装/变量/常量/内存管理
编程语言介绍 机器语言 :直接用计算机二进制指令编写程序,直接控制硬件 汇编语言:用英文标签取代二进制指令编写程序,本质也是直接控制硬件 高级语言:用人能理解的表达方式来编写程序,无需考虑硬件的操作细 ...
- 【python测试开发栈】python内存管理机制(一)—引用计数
什么是内存 在开始进入正题之前,我们先来回忆下,计算机基础原理的知识,为什么需要内存.我们都知道计算机的CPU相当于人类的大脑,其运算速度非常的快,而我们平时写的数据,比如:文档.代码等都是存储在磁盘 ...
- 【第1题】 Pythonn内存管理以及垃圾回收机制
内存管理 Python解释器由c语言开发完成,py中所有的操作最终都由底层的c语言来实现并完成,所以想要了解底层内存管理需要结合python源码来进行解释. 1. 两个重要的结构体 include/o ...
- 编程语言、Python介绍及其解释器安装、运行Python解释器的两种方式、变量、内存管理
一.编程语言介绍 1.1 机器语言:直接用计算机能理解的二进制指令来编写程序,直接控制硬件. 1.2 汇编语言:在机器语言的基础上,用英文标签取代二进制指令来编写程序,本质上也是直接控制硬件. 以上2 ...
随机推荐
- 【51nod-1010】因子只含有2 3 5的数
K的因子中只包含2 3 5.满足条件的前10个数是:2,3,4,5,6,8,9,10,12,15. 所有这样的K组成了一个序列S,现在给出一个数n,求S中 >= 给定数的最小的数. 例如:n = ...
- 关于vue+element-ui的table多选禁用某个按钮
在我做的项目中,有这样一个需求:当table多选没有勾选数据的时候禁用掉导出按钮 效果如图: 当选择一个时候可以导出这行的数据 在按钮定义 :disabled="selected ...
- Java反射-初步入门
Java反射-初步入门 学反射先了解什么是反射. 百度百科:JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动 ...
- java异步计算Future的使用(转)
从jdk1.5开始我们可以利用Future来跟踪异步计算的结果.在此之前主线程要想获得工作线程(异步计算线程)的结果是比较麻烦的事情,需要我们进行特殊的程序结构设计,比较繁琐而且容易出错.有了Futu ...
- HTML, CSS. JS的各种奇葩bug
1. block包含inline-block的时候, inline-block 没有内容的时候,会根据 font 产生一个 line-height 来产生一个空白块. 解决方法: <div cl ...
- 如何将dom4j的jar包放到java项目中
---恢复内容开始--- 如果你建的是java project项目的话,那就通过Myeclispe中的右键你的项目名称,选择build path ->config build path... 然 ...
- 《利用Python进行数据分析》笔记---第2章--1880-2010年间全美婴儿姓名
写在前面的话: 实例中的所有数据都是在GitHub上下载的,打包下载即可. 地址是:http://github.com/pydata/pydata-book 还有一定要说明的: 我使用的是Python ...
- 使用Sinopia搭建私有npm仓库
使用Sinopia搭建私有npm仓库 在用npm装包的时候,每次都要下载一大堆,慢且不说,npm还老被墙,所以就想到在公司内部搭建npm仓库镜像.大概看了几个,觉得Sinopia最简单也好用,所以就使 ...
- hexo部署Github博客
例子:https://aquarius1993.github.io/blog/ 仓库:https://github.com/Aquarius1993/blog (前提是已经安装Xcode和git) 1 ...
- 关于python的包
参考文献:http://blog.sina.com.cn/s/blog_615c388d01017b5o.html 注:本文大多对上连接的整理,仅用于学习,望博主见谅.转载请附上上述链接. 为什么要包 ...