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缩进区别分析
Feb 15 Python
python实现给字典添加条目的方法
Sep 25 Python
python自带的http模块详解
Nov 06 Python
python OpenCV学习笔记之绘制直方图的方法
Feb 08 Python
Django中url的反向查询的方法
Mar 14 Python
python scp 批量同步文件的实现方法
Jan 03 Python
python 多个参数不为空校验方法
Feb 14 Python
Django 使用easy_thumbnails压缩上传的图片方法
Jul 26 Python
基于Python脚本实现邮件报警功能
May 20 Python
Pycharm配置lua编译环境过程图解
Nov 28 Python
matplotlib更改窗口图标的方法示例
Feb 03 Python
python lambda的使用详解
Feb 26 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
dede3.1分页文字采集过滤规则详说(图文教程)
2007/04/03 PHP
深入PHP数据缓存的使用说明
2013/05/10 PHP
PHP文件锁定写入实例解析
2014/07/14 PHP
php多个文件及图片上传实例详解
2014/11/10 PHP
简单谈谈PHP vs Node.js
2015/07/17 PHP
用JQuery 实现AJAX加载XML并解析的脚本
2009/07/25 Javascript
动态加载js和css(外部文件)
2013/04/17 Javascript
jquery 获取标签名(tagName)示例代码
2013/07/11 Javascript
JavaScript显示当然日期和时间即年月日星期和时间
2013/10/29 Javascript
jquery.ajax的url中传递中文乱码问题的解决方法
2014/02/07 Javascript
Node.js与Sails redis组件的使用教程
2017/02/14 Javascript
微信小程序仿微信运动步数排行(交互)
2018/07/13 Javascript
TypeScript类型声明书写详解
2019/08/28 Javascript
VUE渲染后端返回含有script标签的html字符串示例
2019/10/28 Javascript
微信小程序向Java后台传输参数的方法实现
2020/12/10 Javascript
JavaScript 生成唯一ID的几种方式
2021/02/19 Javascript
Python中分数的相关使用教程
2015/03/30 Python
python中for语句简单遍历数据的方法
2015/05/07 Python
Python 转义字符详细介绍
2017/03/21 Python
使用Python实现从各个子文件夹中复制指定文件的方法
2018/10/25 Python
pycharm中显示CSS提示的知识点总结
2019/07/29 Python
pygame实现飞机大战
2020/03/11 Python
Python实现删除某列中含有空值的行的示例代码
2020/07/20 Python
Python 利用argparse模块实现脚本命令行参数解析
2020/12/28 Python
The North Face北面英国官网:美国著名户外品牌
2017/12/13 全球购物
Topman美国官网:英国著名的国际平价时尚男装品牌
2017/12/22 全球购物
在校学生职业规划范文
2014/01/08 职场文书
小学二年级学生评语
2014/04/21 职场文书
十佳中学生事迹材料
2014/06/02 职场文书
行政答辩状范文
2015/05/21 职场文书
民事答辩状范本
2015/05/21 职场文书
2015年高中班级工作总结
2015/07/21 职场文书
中秋晚会致辞
2015/07/31 职场文书
Python读取文件夹下的所有文件实例代码
2021/04/02 Python
golang三种设计模式之简单工厂、方法工厂和抽象工厂
2022/04/10 Golang
Windows Server 2016 配置 IIS 的详细步骤
2022/04/28 Servers