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 代码优化详解
Oct 27 Python
python创建一个最简单http webserver服务器的方法
May 08 Python
Python3控制路由器——使用requests重启极路由.py
May 11 Python
python生成excel的实例代码
Nov 08 Python
pip install urllib2不能安装的解决方法
Jun 12 Python
Python实现12306火车票抢票系统
Jul 04 Python
python中update的基本使用方法详解
Jul 17 Python
浅谈Python type的使用
Nov 19 Python
selenium+python实现自动登陆QQ邮箱并发送邮件功能
Dec 13 Python
python实现ftp文件传输系统(案例分析)
Mar 20 Python
Python面向对象程序设计之静态方法、类方法、属性方法原理与用法分析
Mar 23 Python
基于python实现计算且附带进度条代码实例
Mar 31 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制作静态网站的模板框架(一)
2006/10/09 PHP
openPNE常用方法分享
2011/11/29 PHP
php使用curl发送json格式数据实例
2013/12/17 PHP
php使用curl检测网页是否被百度收录的示例分享
2014/01/31 PHP
使用PHPMailer实现邮件发送代码分享
2014/10/23 PHP
jQuery获取json后使用zy_tmpl生成下拉菜单
2015/03/27 PHP
PHP中file_get_contents函数抓取https地址出错的解决方法(两种方法)
2015/09/22 PHP
PHP7扩展开发教程之Hello World实现方法示例
2017/08/03 PHP
php二维数组按某个键值排序的实例讲解
2019/02/15 PHP
原生js 秒表实现代码
2012/07/24 Javascript
jquery设置按钮停顿3秒不可用
2014/03/07 Javascript
JavaScript中对象property的读取和写入方法介绍
2014/12/30 Javascript
html的DOM中document对象images集合用法实例
2015/01/21 Javascript
在JavaScript中正确引用bind方法的应用
2015/05/11 Javascript
使用JavaScript制作一个简单的计数器的方法
2015/07/07 Javascript
bootstrap datepicker 与bootstrapValidator同时使用时选择日期后无法正常触发校验的解决思路
2016/09/28 Javascript
从零开始学习Node.js系列教程三:图片上传和显示方法示例
2017/04/13 Javascript
JavaScript指定断点操作实例教程
2018/09/18 Javascript
微信小程序扫描二维码获取信息实例详解
2019/05/07 Javascript
JS 设计模式之:工厂模式定义与实现方法浅析
2020/05/06 Javascript
基于aotu.js实现微信自动添加通讯录中的联系人功能
2020/05/28 Javascript
Linux下用Python脚本监控目录变化代码分享
2015/05/21 Python
使用pandas将numpy中的数组数据保存到csv文件的方法
2018/06/14 Python
python 以16进制打印输出的方法
2018/07/09 Python
利用python实现逐步回归
2020/02/24 Python
虚拟机下载python是否需要联网
2020/07/27 Python
Clarria化妆品官方网站:购买天然和有机化妆品系列
2018/04/08 全球购物
澳大利亚在线家具店:Luxo Living
2019/03/24 全球购物
LightInTheBox法国站:中国跨境电商
2020/03/05 全球购物
JAVA和C++的区别
2013/10/06 面试题
论文评语大全
2014/04/29 职场文书
我们的节日国庆活动方案
2014/08/19 职场文书
中班上学期个人总结
2015/02/12 职场文书
2016国培研修心得体会
2016/01/08 职场文书
2016年主题党日活动总结
2016/04/05 职场文书
Python 如何解决稀疏矩阵运算
2021/05/26 Python