Python限制内存和CPU使用量的方法(Unix系统适用)
作者:David Beazley 发布时间:2023-08-02 08:41:44
标签:Python,限制,内存,CPU
问题
你想对在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


猜你喜欢
- 于是就测试了下: var stringToDom=function(text) { var doc; if(window.ActiveXOb
- Javascript是网页制作中离不开的脚本语言,依靠它,一个网页的内容才生动活泼、富有朝气。但也许你还没有发现并应用它的一些更高级的功能吧
- 网页设计中,内容组织恐怕是最至关重要、最影响设计品质的方面了。如何将信息组织到好的布局中,是一个网站的基础,并且应该在考虑外观之前就决定好。
- 1. 计算给出两个时间之间的时间差import datetime as dt# current timecur_time = dt.date
- 今天又遇到修改MySQL默认字符集编码的问题,折腾了半天解决了,赶快记录下来,以后就不用每次折腾了。查看MySQL字符集的命令是“show
- 本文主要描述了MySQL遭到攻击篡改数据,利用从库的备份和主库的binlog进行不完全恢复。欢迎转载,请注明作者、出处。作者:张正QQ:17
- Matlab将矩阵保存到csv和txt文件语法:csvwrite(filename,M)csvwrite(filename,M,row,co
- 一、前言确保安装scikit-imagenumpy二、Dataset一个例子:# 导入需要的包import torchimport torc
- 问题:例如我们要选从不同省份选取一个号码,每个省份的权重不一样,直接选随机数肯定是不行的了,就需要一个模型来解决这个问题。简化成下面的问题:
- 前言help(argparse)查看说明文档,“argparse - Command-line parsing libr
- 项目场景:在使用selenium模块进行数据爬取时,通常会遇到爬取iframe中的内容。会因为定位的作用域问题爬取不到数据。问题描述:我们以
- vue中最常见的属v-model这个数据双向绑定了,很好奇它是如何实现的呢?尝试着用原生的JS去实现一下。首先大致学习了解下Object.d
- Github是目前世界上最流行的代码存储和分享平台,而PyCharm是Python圈中最流行的IDE,它很好地支持了Git操作。本文将会
- 1. 为什么要使用协程在上一篇中,我们从生成器的基本认识与使用,成功过渡到了协程。但一定有许多人,只知道协程是个什么东西,但并不知道为什么要
- 当前需求:有group和factor两张表,一个group对应多个factor,现在想查询有效的group和对应的有效的factor,两个表
- Jupyter Notebook默认不显示行号,可是当我们代码报错时,发现会显示自己多少行出现错误。eg:这时候我们总不能一行行去数吧,因此
- 最近,就“尊重”一词,个人小有感概。也许跟我说“尊重”一词的同事并不是这么想的,但我反思了一下自己,作为一名设计师,确实存在这些疑问(不足之
- 1。帐号和口令设置 要选择用户SYS、SYSTEM、DBSNMP、SYSMAN使用相同的口令,那就选择“所有账户使用同一口令”。 BI用户,
- 微服务架构在现代软件开发中日益普及,它将复杂的应用程序拆分成多个可独立部署的小型服务。本文将介绍如何使用 Python 的 FastAPI
- 内容摘要:FCKeditor至今已经到了2.3.1版本了,对于国内的WEB开发者来说,也基本上都已经“闻风知多少”了,很多人将其融放到自己的