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 相关文章推荐
pyqt4教程之实现windows窗口小示例分享
Mar 07 Python
在Django中进行用户注册和邮箱验证的方法
May 09 Python
浅谈python字符串方法的简单使用
Jul 18 Python
Python 出现错误TypeError: ‘NoneType’ object is not iterable解决办法
Jan 12 Python
Python基于回溯法子集树模板解决野人与传教士问题示例
Sep 11 Python
在Python中增加和插入元素的示例
Nov 01 Python
python Pexpect 实现输密码 scp 拷贝的方法
Jan 03 Python
实例讲解Python中浮点型的基本内容
Feb 11 Python
Python 内置变量和函数的查看及说明介绍
Dec 25 Python
Python基础之变量基本用法与进阶详解
Jan 03 Python
Windows下python3安装tkinter的问题及解决方法
Jan 06 Python
Python利用matplotlib绘制折线图的新手教程
Nov 05 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中强制下载文件的代码(解决了IE下中文文件名乱码问题)
2011/05/09 PHP
PHP把空格、换行符、中文逗号等替换成英文逗号的正则表达式
2014/05/04 PHP
php中__destruct与register_shutdown_function执行的先后顺序问题
2014/10/17 PHP
Yii2实现ajax上传图片插件用法
2016/04/28 PHP
PHPStrom 新建FTP项目以及在线操作教程
2016/10/16 PHP
PHP的图像处理实例小结【文字水印、图片水印、压缩图像等】
2019/12/20 PHP
PhpStorm2020.1 安装 debug - Postman 调用的详细教程
2020/08/17 PHP
javascript淡入淡出效果的实现思路
2012/03/31 Javascript
jqGrid读取选择的多行的某个属性代码
2014/05/18 Javascript
JS在IE下缺少标识符的错误
2014/07/23 Javascript
js模仿java的Map集合详解
2016/01/06 Javascript
深入分析node.js的异步API和其局限性
2016/09/05 Javascript
js实现数字递增特效【仿支付宝我的财富】
2017/05/05 Javascript
webpack+vue中使用别名路径引用静态图片地址
2017/11/20 Javascript
JS插件clipboard.js实现一键复制粘贴功能
2020/12/04 Javascript
微信小程序tabbar底部导航
2018/11/05 Javascript
详解element-ui设置下拉选择切换必填和非必填
2019/06/17 Javascript
ant-design-vue中的select选择器,对输入值的进行筛选操作
2020/10/24 Javascript
[48:32]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 LGD vs VG
2018/04/01 DOTA
推荐11个实用Python库
2015/01/23 Python
用Python实现一个简单的多线程TCP服务器的教程
2015/05/05 Python
python结合API实现即时天气信息
2016/01/19 Python
python在线编译器的简单原理及简单实现代码
2018/02/02 Python
python求解数组中两个字符串的最小距离
2018/09/27 Python
python 与服务器的共享文件夹交互方法
2018/12/27 Python
python里dict变成list实例方法
2019/06/26 Python
python绘制BA无标度网络示例代码
2019/11/21 Python
logging level级别介绍
2020/02/21 Python
HTML5 body设置全屏背景图片的示例代码
2020/12/08 HTML / CSS
法国床上用品商店:La Compagnie du lit
2019/12/26 全球购物
中层竞聘演讲稿
2014/01/09 职场文书
学校2014年度工作总结
2014/12/06 职场文书
社区活动总结范文
2015/05/07 职场文书
教学反思怎么写
2016/02/24 职场文书
MySQL root密码的重置方法
2021/04/21 MySQL
golang 比较浮点数的大小方式
2021/05/02 Golang