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的面向对象思想分析
Jan 14 Python
Python探索之pLSA实现代码
Oct 25 Python
使用tensorflow实现线性回归
Sep 08 Python
python 读取竖线分隔符的文本方法
Dec 20 Python
Python之NumPy(axis=0 与axis=1)区分详解
May 27 Python
在linux系统下安装python librtmp包的实现方法
Jul 22 Python
python基于K-means聚类算法的图像分割
Oct 30 Python
python自动脚本的pyautogui入门学习
Apr 01 Python
keras输出预测值和真实值方式
Jun 27 Python
python按照list中字典的某key去重的示例代码
Oct 13 Python
python判断all函数输出结果是否为true的方法
Dec 03 Python
virtualenv隔离Python环境的问题解析
Jun 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
一个取得文件扩展名的函数
2006/10/09 PHP
PHP实现手机号码中间四位用星号(*)隐藏的自定义函数分享
2014/09/27 PHP
PHP配置把错误日志以邮件方式发送方法(Windows系统)
2015/06/23 PHP
php处理单文件、多文件上传代码分享
2016/08/24 PHP
PHP+redis实现的限制抢购防止商品超发功能详解
2019/09/19 PHP
运用jquery实现table单双行不同显示并能单行选中
2009/07/25 Javascript
C#中TrimStart,TrimEnd,Trim在javascript上的实现
2011/01/17 Javascript
Javascript调用函数方法的几种方式介绍
2015/03/20 Javascript
Bootstrap如何创建表单
2016/10/21 Javascript
javascript中json基础知识详解
2017/01/19 Javascript
jquery实现左右滑动式轮播图
2017/03/02 Javascript
详解nodejs微信公众号开发——6.自定义菜单
2017/04/13 NodeJs
angularJS 发起$http.post和$http.get请求的实现方法
2017/05/18 Javascript
Vue2路由动画效果的实现代码
2017/07/10 Javascript
详解Vue 全局引入bass.scss 处理方案
2018/03/26 Javascript
Vue 中axios配置实例详解
2018/07/27 Javascript
bootstrap table实现横向合并与纵向合并
2019/07/18 Javascript
[03:19]2016国际邀请赛中国区预选赛第四日TOP10镜头集锦
2016/07/01 DOTA
python根据给定文件返回文件名和扩展名的方法
2015/03/27 Python
利用Python如何实现数据驱动的接口自动化测试
2018/05/11 Python
基于DATAFRAME中元素的读取与修改方法
2018/06/08 Python
python for循环remove同一个list过程解析
2019/08/14 Python
Python如何基于rsa模块实现非对称加密与解密
2020/01/03 Python
在pytorch 中计算精度、回归率、F1 score等指标的实例
2020/01/18 Python
Python判断字符串是否为空和null方法实例
2020/04/26 Python
台湾网购生鲜第一品牌:i3Fresh爱上新鲜
2017/10/26 全球购物
英国时尚优质的女装:Hope Fashion
2018/08/14 全球购物
高职教师先进事迹材料
2014/08/24 职场文书
优秀党员自我评价范文
2014/09/15 职场文书
幼儿园中班教师个人工作总结
2015/02/06 职场文书
离婚民事起诉状
2015/08/03 职场文书
2016年班主任新年寄语
2015/08/18 职场文书
2016年“世界环境日”校园广播稿
2015/12/18 职场文书
Python趣味挑战之用pygame实现简单的金币旋转效果
2021/05/31 Python
浅谈Web Storage API的使用
2021/06/23 Javascript
Redis集群节点通信过程/原理流程分析
2022/03/18 Redis