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 相关文章推荐
完美解决Pycharm无法导入包的问题 Unresolved reference
May 18 Python
Python 一句话生成字母表的方法
Jan 02 Python
python3 selenium自动化测试 强大的CSS定位方法
Aug 23 Python
python继承threading.Thread实现有返回值的子类实例
May 02 Python
如何通过Python3和ssl实现加密通信功能
May 09 Python
Python中bisect的用法及示例详解
Jul 20 Python
Python map及filter函数使用方法解析
Aug 06 Python
python绘图模块之利用turtle画图
Feb 12 Python
python网络爬虫实现发送短信验证码的方法
Feb 25 Python
再也不用花钱买漫画!Python爬取某漫画的脚本及源码
Jun 09 Python
python实现手机推送 代码也就10行左右
Apr 12 Python
利用Python实现翻译HTML中的文本字符串
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
php基础知识:函数基础知识
2006/12/13 PHP
PHP程序开发范例学习之表单 获取文本框的值
2011/08/08 PHP
php伪静态之APACHE篇
2014/06/02 PHP
php实现的简易扫雷游戏实例
2015/07/09 PHP
js对数字的格式化使用说明
2011/01/12 Javascript
httpclient模拟登陆具体实现(使用js设置cookie)
2013/12/11 Javascript
利用jquery.qrcode在页面上生成二维码且支持中文
2014/02/12 Javascript
js动态添加表格数据使用insertRow和insertCell实现
2014/05/22 Javascript
javascript自定义in_array()函数实现方法
2015/08/03 Javascript
详解JavaScript中的Unescape()和String() 函数
2015/11/09 Javascript
基于jQuery日历插件制作日历
2016/03/11 Javascript
深入解析JavaScript中函数的Currying柯里化
2016/03/19 Javascript
JS使用单链表统计英语单词出现次数
2016/06/16 Javascript
Vuex提升学习篇
2018/01/11 Javascript
浅谈在react中如何实现扫码枪输入
2018/07/04 Javascript
解决Layui数据表格中checkbox位置不居中的方法
2018/08/15 Javascript
JS简易计算器实例讲解
2020/06/30 Javascript
浅谈vue中使用编辑器vue-quill-editor踩过的坑
2020/08/03 Javascript
[33:09]完美世界DOTA2联赛循环赛 Forest vs DM BO2第二场 10.29
2020/10/29 DOTA
不要用强制方法杀掉python线程
2017/02/26 Python
Python排序算法之选择排序定义与用法示例
2018/04/29 Python
python 伯努利分布详解
2020/02/25 Python
CSS3教程(4):网页边框和网页文字阴影
2009/04/02 HTML / CSS
使用css3和jquery实现可伸缩搜索框
2014/02/12 HTML / CSS
html5表单及新增的改良元素详解
2016/06/07 HTML / CSS
Java面向对象面试题
2016/12/26 面试题
中医专业职业生涯规划书范文
2014/01/04 职场文书
高中军训感言400字
2014/02/24 职场文书
明星员工获奖感言
2014/08/14 职场文书
有关九一八事变的演讲稿
2014/09/14 职场文书
仲裁协议书
2014/09/26 职场文书
优秀创业计划书分享
2019/07/19 职场文书
写作技巧:如何撰写商业计划书
2019/08/08 职场文书
如何解决springcloud feign 首次调用100%失败的问题
2021/06/23 Java/Android
SpringCloud之@FeignClient()注解的使用方式
2021/09/25 Java/Android
科学家研发出新型速效酶,可在 24 小时内降解塑料制品
2022/04/29 数码科技