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常见数制转换实例分析
May 09 Python
python使用super()出现错误解决办法
Aug 14 Python
浅谈python爬虫使用Selenium模拟浏览器行为
Feb 23 Python
Python基于whois模块简单识别网站域名及所有者的方法
Apr 23 Python
numpy中loadtxt 的用法详解
Aug 03 Python
Python 使用PIL中的resize进行缩放的实例讲解
Aug 03 Python
python中栈的原理及实现方法示例
Nov 27 Python
Python三元运算与lambda表达式实例解析
Nov 30 Python
python各层级目录下import方法代码实例
Jan 20 Python
Python3 利用face_recognition实现人脸识别的方法
Mar 13 Python
利用python下载scihub成文献为PDF操作
Jul 09 Python
Python如何使用神经网络进行简单文本分类
Feb 25 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生成excel时单元格内换行问题的解决方法
2010/08/26 PHP
PHP删除特定数组内容并且重建数组索引的方法.
2011/03/25 PHP
PHP header()函数使用详细(301、404等错误设置)
2013/04/17 PHP
php中cookie的使用方法
2014/03/29 PHP
动态样式类封装JS代码
2009/09/02 Javascript
javascript 基础篇4 window对象,DOM
2012/03/14 Javascript
js函数参数设置默认值的一种变通实现方法
2014/05/26 Javascript
创建js对象和js类的方法汇总
2014/12/24 Javascript
JS+CSS实现实用的单击输入框弹出选择框的方法
2015/02/28 Javascript
javascript鼠标右键菜单自定义效果
2020/12/08 Javascript
Javascript技术栈中的四种依赖注入小结
2016/02/27 Javascript
ionic实现下拉刷新载入数据功能
2017/05/11 Javascript
浅谈对Angular中的生命周期钩子的理解
2017/07/31 Javascript
详解从零搭建 vue2 vue-router2 webpack3 工程
2017/11/22 Javascript
React key值的作用和使用详解
2018/08/23 Javascript
vue v-for循环重复数据无法添加问题解决方法【加track-by='索引'】
2019/03/15 Javascript
你不知道的 TypeScript 高级类型(小结)
2020/08/28 Javascript
jquery实现抽奖功能
2020/10/22 jQuery
[01:40]2014DOTA2国际邀请赛 三冰SOLO赛后采访恶搞
2014/07/09 DOTA
Python写的贪吃蛇游戏例子
2014/06/16 Python
Python Flask-web表单使用详解
2017/11/18 Python
Python使用pickle模块存储数据报错解决示例代码
2018/01/26 Python
python3+PyQt5重新实现QT事件处理程序
2018/04/19 Python
python3.5绘制随机漫步图
2018/08/27 Python
只需7行Python代码玩转微信自动聊天
2019/01/27 Python
python多线程与多进程及其区别详解
2019/08/08 Python
Python 读取用户指令和格式化打印实现解析
2019/09/02 Python
python GUI库图形界面开发之PyQt5控件QTableWidget详细使用方法与属性
2020/02/25 Python
三步解决python PermissionError: [WinError 5]拒绝访问的情况
2020/04/22 Python
Ubuntu 20.04安装Pycharm2020.2及锁定到任务栏的问题(小白级操作)
2020/10/29 Python
Biblibili视频投稿接口分析并以Python实现自动投稿功能
2021/02/05 Python
“型”走纽约上东区:Sam Edelman
2017/04/02 全球购物
服装厂厂长职责
2013/12/16 职场文书
企业员工培训感言
2014/02/26 职场文书
护士自我鉴定总结
2014/03/24 职场文书
Mysql中的触发器定义及语法介绍
2022/06/25 MySQL