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使用multiprocessing模块实现带回调函数的异步调用方法
Apr 18 Python
解析Python中的生成器及其与迭代器的差异
Jun 20 Python
深入理解Python分布式爬虫原理
Nov 23 Python
微信跳一跳python辅助脚本(总结)
Jan 11 Python
python+POP3实现批量下载邮件附件
Jun 19 Python
Python列表生成式与生成器操作示例
Aug 01 Python
django的ORM操作 增加和查询
Jul 26 Python
python获取依赖包和安装依赖包教程
Feb 13 Python
python3用urllib抓取贴吧邮箱和QQ实例
Mar 10 Python
Selenium元素定位的30种方式(史上最全)
May 11 Python
基于python模拟TCP3次握手连接及发送数据
Nov 06 Python
python高温预警数据获取实例
Jul 23 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中一些可能会被忽略的问题
2013/06/21 PHP
php 判断IP为有效IP地址的方法
2018/01/28 PHP
PDO::getAvailableDrivers讲解
2019/01/28 PHP
php 根据URL下载远程图片、压缩包、pdf等文件到本地
2019/07/26 PHP
PHP生成随机密码4种方法及性能对比
2020/12/11 PHP
浅谈JavaScript中面向对象技术的模拟
2006/09/25 Javascript
基于KMP算法JavaScript的实现方法分析
2013/05/03 Javascript
如何使用jquery控制CSS样式,并且取消Css样式(如背景色,有实例)
2013/07/09 Javascript
open 动态修改img的onclick事件示例代码
2013/11/13 Javascript
浅析JQuery UI Dialog的样式设置问题
2013/12/18 Javascript
JavaScript中判断整数的多种方法总结
2014/11/08 Javascript
简单谈谈json跨域
2016/03/13 Javascript
jQuery Ajax 异步加载显示等待效果代码分享
2016/08/01 Javascript
Angular外部使用js调用Angular控制器中的函数方法或变量用法示例
2016/08/05 Javascript
js严格模式总结(分享)
2016/08/22 Javascript
js中DOM事件绑定分析
2018/03/18 Javascript
seajs下require书写约定实例分析
2018/05/16 Javascript
JS栈stack类的实现与使用方法示例
2019/01/31 Javascript
详解微信小程序网络请求接口封装实例
2019/05/02 Javascript
Vue最新防抖方案(必看篇)
2019/10/30 Javascript
jQuery高级编程之js对象、json与ajax用法实例分析
2019/11/01 jQuery
Vue实现购物车实例代码两则
2020/05/30 Javascript
详解如何使用React Hooks请求数据并渲染
2020/10/18 Javascript
如何封装Vue Element的table表格组件
2021/02/06 Vue.js
python查看zip包中文件及大小的方法
2015/07/09 Python
Python实现各种排序算法的代码示例总结
2015/12/11 Python
python创建列表和向列表添加元素的实现方法
2017/12/25 Python
Python动刷新抢12306火车票的代码(附源码)
2018/01/24 Python
python使用json序列化datetime类型实例解析
2018/02/11 Python
Python走楼梯问题解决方法示例
2018/07/25 Python
python实现计算器简易版
2020/12/17 Python
结合 CSS3 transition transform 实现简单的跑马灯效果的示例
2018/02/07 HTML / CSS
什么是SCM(软件配置管理)
2014/08/16 面试题
优秀教师先进个人事迹材料
2014/08/31 职场文书
擅自离岗检讨书
2014/09/12 职场文书
2015年秋季开学典礼校长致辞
2015/07/16 职场文书