一日一技:限制你的Python程序所能使用的最大内存

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一日一技:限制你的Python程序所能使用的最大内存相关的知识,希望对你有一定的参考价值。

一日一技:限制你的Python程序所能使用的最大内存

如果程序开发不当,可能会出现占用过多内存的情况。特别是在Docker里面,如果Python程序占用太多内存,可能会导致Docker容器死掉。

为了限制Python程序所能使用的最大内存,我们可以使用Python自带的 resource模块。

首先获取系统默认的内存 soft上限和 hard上限:

import resource
soft, hard = resource.getrlimit(resource.RLIMIT_AS)

其中的 resource.RLIMIT_AS实际上就是数字5,表示内存资源。而 soft限制是一个可以调节的内存使用上限, hard是一个一旦设定就很难动态调整的内存使用量上限。

在我的电脑上运行效果如下图所示:
技术图片

一开始 soft和 hard的值是一样的。并且它们的单位不是比特。而是比比特还小的单位。我的电脑是8GB内存,而 8*1024^6 正好约等于这里的hard和soft的值。

接下来,设置当前运行的这个Python程序能够使用的最大内存:

resource.setrlimit(resource.RLIMIT_AS, (最大上限, hard))

其中最大上限是一个整数。假设我想限制当前程序最多可以使用500MB的内存,那么这里的最大上限可以设置为:


0.5 * 1024 ^ 6 = 576460752303423488

所以设置为:


resource.setrlimit(resource.RLIMIT_AS, (576460752303423488, hard))

那么当前Python程序使用的内存超过500MB以后,程序就会抛出 MemoryError。

最后,这些代码只能在Linux系统上正常工作。Windows和Mac上可能会有问题。

kingname

以上是关于一日一技:限制你的Python程序所能使用的最大内存的主要内容,如果未能解决你的问题,请参考以下文章

一日一技:炸掉你的内存—— itertools.tee 的缺陷

一日一技:在Linux系统中如何查询正在运行的程序的路径

一日一技:快速实现Python 命令行参数

一日一技:在Python里面实现链式调用

一日一技:在Python里面做分数的运算

一日一技:更优雅地在 Python 中写日志