Python限制内存和CPU使用量的方法(Unix系统适用)


Posted in Python onAugust 04, 2020

问题

你想对在Unix系统上面运行的程序设置内存或CPU的使用限制。

解决方案

resource 模块能同时执行这两个任务。例如,要限制CPU时间,可以像下面这样做:

import signal
import resource
import os

def time_exceeded(signo, frame):
 print("Time's up!")
 raise SystemExit(1)

def set_max_runtime(seconds):
 # Install the signal handler and set a resource limit
 soft, hard = resource.getrlimit(resource.RLIMIT_CPU)
 resource.setrlimit(resource.RLIMIT_CPU, (seconds, hard))
 signal.signal(signal.SIGXCPU, time_exceeded)

if __name__ == '__main__':
 set_max_runtime(15)
 while True:
  pass

程序运行时,SIGXCPU 信号在时间过期时被生成,然后执行清理并退出。

要限制内存使用,设置可使用的总内存值即可,如下:

import resource

def limit_memory(maxsize):
 soft, hard = resource.getrlimit(resource.RLIMIT_AS)
 resource.setrlimit(resource.RLIMIT_AS, (maxsize, hard))

像这样设置了内存限制后,程序运行到没有多余内存时会抛出 MemoryError 异常。

讨论

在本节例子中,setrlimit() 函数被用来设置特定资源上面的软限制和硬限制。 软限制是一个值,当超过这个值的时候操作系统通常会发送一个信号来限制或通知该进程。 硬限制是用来指定软限制能设定的最大值。通常来讲,这个由系统管理员通过设置系统级参数来决定。 尽管硬限制可以改小一点,但是最好不要使用用户进程去修改。

setrlimit() 函数还能被用来设置子进程数量、打开文件数以及类似系统资源的限制。 更多详情请参考 resource 模块的文档。

需要注意的是本节内容只能适用于Unix系统,并且不保证所有系统都能如期工作。 比如我们在测试的时候,它能在Linux上面正常运行,但是在OS X上却不能。

以上就是Python限制内存和CPU的使用量的方法的详细内容,更多关于Python限制内存和CPU的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
深入学习Python中的上下文管理器与else块
Aug 27 Python
Python 私有函数的实例详解
Sep 11 Python
python方向键控制上下左右代码
Jan 20 Python
python单例模式获取IP代理的方法详解
Sep 13 Python
python中yield的用法详解——最简单,最清晰的解释
Apr 04 Python
Python安装Flask环境及简单应用示例
May 03 Python
python 如何去除字符串头尾的多余符号
Nov 19 Python
Python 中@property的用法详解
Jan 15 Python
keras获得model中某一层的某一个Tensor的输出维度教程
Jan 24 Python
python自动点赞功能的实现思路
Feb 26 Python
Matplotlib自定义坐标轴刻度的实现示例
Jun 18 Python
如何在Python3中使用telnetlib模块连接网络设备
Sep 21 Python
Python如何将将模块分割成多个文件
Aug 04 #Python
Python 保存加载mat格式文件的示例代码
Aug 04 #Python
python中判断文件结束符的具体方法
Aug 04 #Python
python字典key不能是可以是啥类型
Aug 04 #Python
Python延迟绑定问题原理及解决方案
Aug 04 #Python
Python 使用生成器代替线程的方法
Aug 04 #Python
详解Tensorflow不同版本要求与CUDA及CUDNN版本对应关系
Aug 04 #Python
You might like
使用php4加速网络传输
2006/10/09 PHP
解析PHP跳出循环的方法以及continue、break、exit的区别介绍
2013/07/01 PHP
YII路径的用法总结
2014/07/09 PHP
php 模拟 asp.net webFrom 按钮提交事件实例
2014/10/13 PHP
php查询mysql数据库并将结果保存到数组的方法
2015/03/18 PHP
PHP网站建设的流程与步骤分享
2015/09/25 PHP
php实现遍历多维数组的方法
2015/11/25 PHP
PHP解析url并得到url参数方法总结
2018/10/11 PHP
javascript对象之内置对象Math使用方法
2010/04/16 Javascript
JavaScript原型继承之基础机制分析
2011/08/26 Javascript
jquery插件制作教程 txtHover
2012/08/17 Javascript
关于jQuery中.attr()和.prop()的问题探讨
2013/09/06 Javascript
ZeroClipboard插件实现多浏览器复制功能(支持firefox、chrome、ie6)
2014/08/30 Javascript
详细总结Javascript中的焦点管理
2016/09/17 Javascript
微信小程序 图片绝对定位(背景图片)
2017/04/05 Javascript
浅谈ECMAScript6新特性之let、const
2017/08/02 Javascript
JS构造一个html文本内容成文件流形式发送到后台
2018/07/31 Javascript
layui 表格的属性的显示转换方法
2018/08/14 Javascript
vue前端框架—Mint UI详解(更适用于移动端)
2019/04/30 Javascript
JavaScript中的this原理及6种常见使用场景详解
2020/02/14 Javascript
解决Vue中的生命周期beforeDestory不触发的问题
2020/07/21 Javascript
JavaScript实现滚动加载更多
2020/12/27 Javascript
uniapp微信小程序:key失效的解决方法
2021/01/20 Javascript
[01:59][TI9趣味视频] 全明星赛奖励
2019/08/23 DOTA
Python中的二叉树查找算法模块使用指南
2014/07/04 Python
django实现分页的方法
2015/05/26 Python
使用Python实现简单的服务器功能
2017/08/25 Python
pyqt 实现在Widgets中显示图片和文字的方法
2019/06/13 Python
python快速排序的实现及运行时间比较
2019/11/22 Python
linux mint中搜狗输入法导致pycharm卡死的问题
2020/10/28 Python
如何写好建议书
2014/03/13 职场文书
我的未来不是梦演讲稿
2014/09/02 职场文书
休假证明书
2015/06/24 职场文书
教师节简报
2015/07/20 职场文书
导游词之舟山普陀山
2019/11/06 职场文书
iSCSI服务器CHAP双向认证配置
2022/04/01 Servers