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多进程编程技术实例分析
Sep 16 Python
Python加pyGame实现的简单拼图游戏实例
May 15 Python
Python利用ansible分发处理任务
Aug 04 Python
python 中字典嵌套列表的方法
Jul 03 Python
pygame实现简易飞机大战
Sep 11 Python
Scrapy框架爬取西刺代理网免费高匿代理的实现代码
Feb 22 Python
python GUI库图形界面开发之PyQt5多行文本框控件QTextEdit详细使用方法实例
Feb 28 Python
基于python实现音乐播放器代码实例
Jul 01 Python
Python requests接口测试实现代码
Sep 08 Python
总结python 三种常见的内存泄漏场景
Nov 20 Python
Python实现Appium端口检测与释放的实现
Dec 31 Python
Python3爬虫ChromeDriver的安装实例
Feb 06 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
在PHP中PDO解决中文乱码问题的一些补充
2010/09/06 PHP
给初学者的30条PHP最佳实践(荒野无灯)
2011/08/02 PHP
php创建和删除目录函数介绍和递归删除目录函数分享
2014/11/18 PHP
PHP socket 模拟POST 请求实例代码
2016/07/18 PHP
PHP面试常用算法(推荐)
2016/07/22 PHP
php操作mongodb封装类与用法实例
2018/09/01 PHP
表单填写时用回车代替TAB的实现方法
2007/10/09 Javascript
Bookmarklet实现启动jQuery(模仿 云输入法)
2010/09/15 Javascript
Node.js模块加载详解
2014/08/16 Javascript
深入浅出分析javaScript中this用法
2015/05/09 Javascript
JavaScript实现列表分页功能特效
2015/05/15 Javascript
JS实现兼容性较好的随屏滚动效果
2015/11/09 Javascript
javascript 开发之百度地图使用到的js函数整理
2017/05/19 Javascript
关于express与koa的使用对比详解
2018/01/25 Javascript
JS改变页面颜色源码分享
2018/02/24 Javascript
在vue中封装可复用的组件方法
2018/03/01 Javascript
vue中的v-if和v-show的区别详解
2019/09/01 Javascript
微信小程序点击按钮动态切换input的disabled禁用/启用状态功能
2020/03/07 Javascript
[00:57]林俊杰助阵DOTA2亚洲邀请赛
2015/01/28 DOTA
[36:45]TNC vs VGJ.S 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
跟老齐学Python之字典,你还记得吗?
2014/09/20 Python
Python中urllib+urllib2+cookielib模块编写爬虫实战
2016/01/20 Python
Python新手入门最容易犯的错误总结
2017/04/24 Python
python实现图片九宫格分割
2021/03/07 Python
python中Ansible模块的Playbook的具体使用
2020/05/28 Python
你需要学会的8个Python列表技巧
2020/06/24 Python
汉语言文学职业规划
2014/02/14 职场文书
取保候审保证书
2014/04/30 职场文书
乒乓球兴趣小组活动总结
2014/07/08 职场文书
镇副书记专题民主生活会对照检查材料思想汇报
2014/10/02 职场文书
国博复兴之路观后感
2015/06/02 职场文书
公司趣味运动会开幕词
2016/03/04 职场文书
python实现ROA算子边缘检测算法
2021/04/05 Python
React 高阶组件HOC用法归纳
2021/06/13 Javascript
MySQL读取JSON转换的方式
2022/03/18 MySQL
让JavaScript代码更加精简的方法技巧
2022/06/01 Javascript