Python限制内存和CPU使用量的方法(Unix系统适用)
作者:David Beazley 时间:2023-08-02 08:41:44
问题
你想对在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上却不能。
来源:https://python3-cookbook.readthedocs.io/zh_CN/latest/c13/p14_putting_limits_on_memory_and_cpu_usage.html
标签:Python,限制,内存,CPU
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
Python 给某个文件名添加时间戳的方法
2023-02-10 21:12:56
numpy中的log和ln函数解读
2023-06-14 22:46:40
![](https://img.aspxhome.com/file/2023/8/60708_0s.jpg)
使用带批注的 XDR 架构创建 XML 视图
2008-09-04 14:24:00
ES6入门教程之let、const的使用方法
2024-05-22 10:36:59
python读取与写入csv格式文件的示例代码
2023-08-09 09:07:15
基于python 处理中文路径的终极解决方法
2023-07-21 00:47:09
解决mysql的int型主键自增问题
2024-01-28 11:54:45
![](https://img.aspxhome.com/file/2023/9/87119_0s.png)
Python实现计算长方形面积(带参数函数demo)
2021-07-02 10:07:20
![](https://img.aspxhome.com/file/2023/1/135121_0s.jpg)
基于Bootstrap实现图片轮播效果
2024-04-28 10:19:50
python 实现return返回多个值
2022-10-12 17:23:37
vue切换页面(路由)时如何保持滚动条回到顶部
2024-05-28 15:54:49
pandas多级分组实现排序的方法
2022-05-06 14:16:11
在nginx中配置pathinfo模式支持thinkphp的URL重写
2024-05-03 15:50:48
python进阶教程之异常处理
2023-10-14 23:04:17
Redis五种数据结构在JAVA中如何封装使用
2024-01-12 16:51:37
![](https://img.aspxhome.com/file/2023/0/78910_0s.png)
python监控网卡流量并使用graphite绘图的示例
2022-06-24 22:35:54
TypeScript函数和类型断言实例详解
2024-04-17 10:00:09
![](https://img.aspxhome.com/file/2023/1/136431_0s.jpg)
jquery弹出层背景变暗 Lee dialog
2008-08-18 13:11:00
![](https://img.aspxhome.com/file/UploadPic/20088/18/2008818131847932s.gif)
Django Admin后台模型列表页面如何添加自定义操作按钮
2021-02-24 18:57:15
![](https://img.aspxhome.com/file/2023/7/131557_0s.png)
Python中正则表达式的用法实例汇总
2021-10-02 07:48:08