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 ORM框架SQLAlchemy学习笔记之数据添加和事务回滚介绍
Jun 10 Python
Python中线程编程之threading模块的使用详解
Jun 23 Python
python连接mysql实例分享
Oct 09 Python
浅谈python函数之作用域(python3.5)
Oct 27 Python
python 读取Linux服务器上的文件方法
Dec 27 Python
如何使用Python脚本实现文件拷贝
Nov 20 Python
Numpy与Pytorch 矩阵操作方式
Dec 27 Python
sklearn+python:线性回归案例
Feb 24 Python
如何在Python 游戏中模拟引力
Mar 27 Python
pytest配置文件pytest.ini的详细使用
Apr 17 Python
pytorch 6 batch_train 批训练操作
May 28 Python
python 如何做一个识别率百分百的OCR
May 29 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
在JavaScript中调用php程序
2009/03/09 PHP
探讨PHP中this,self,parent的区别详解
2013/06/08 PHP
php 获取页面中指定内容的实现类
2014/01/23 PHP
thinkphp框架实现删除和批量删除
2016/06/29 PHP
完美解决在ThinkPHP控制器中命名空间的问题
2017/05/05 PHP
一款jquery特效编写的大度宽屏焦点图切换特效的实例代码
2013/08/05 Javascript
JS实现弹性菜单效果代码
2015/09/07 Javascript
JS封装cookie操作函数实例(设置、读取、删除)
2015/11/17 Javascript
js确认框confirm()用法实例详解
2016/01/07 Javascript
jquery动态切换背景图片的简单实现方法
2016/05/14 Javascript
AngularJS入门教程之数据绑定用法示例
2016/11/01 Javascript
基于Vue实例对象的数据选项
2017/08/09 Javascript
vue的事件绑定与方法详解
2017/08/16 Javascript
详解nodejs中express搭建权限管理系统
2017/09/15 NodeJs
vue中如何去掉空格的方法实现
2018/11/09 Javascript
jQuery点击页面其他部分隐藏下拉菜单功能
2018/11/27 jQuery
JavaScript遍历数组和对象的元素简单操作示例
2019/07/09 Javascript
ES6之Proxy的get方法详解
2019/10/11 Javascript
JS实现打字游戏
2019/12/17 Javascript
vue+springboot+element+vue-resource实现文件上传教程
2020/10/21 Javascript
基于python编写的微博应用
2014/10/17 Python
python下载文件时显示下载进度的方法
2015/04/02 Python
python发送邮件功能实现代码
2016/07/15 Python
python实现解数独程序代码
2017/04/12 Python
深入理解Django的自定义过滤器
2017/10/17 Python
Python数据正态性检验实现过程
2020/04/18 Python
python实现斗地主分牌洗牌
2020/06/22 Python
Keras 中Leaky ReLU等高级激活函数的用法
2020/07/05 Python
python3.5的包存放的具体路径
2020/08/16 Python
跑鞋、网球鞋、网球拍、服装及装备:Holabird Sports
2016/09/19 全球购物
荷兰手表网站:Watch2Day
2018/07/02 全球购物
什么是事务?事务有哪些性质?
2012/03/11 面试题
医生实习工作总结的自我评价
2013/09/27 职场文书
2014年度培训工作总结
2014/11/27 职场文书
小学主题班会教案
2015/08/17 职场文书
长辈生日祝福语大全(72句)
2019/08/09 职场文书