python 之 资源使用与控制 resource模块
一、背景
2021年做可信计算时,由于甲方给的CPU利用率不能不能超过20%;
目的:我们的程序部署甲方服务器上不能阻碍其甲方服务的正常运行
我们的程序在CPU超过20%时,可以休眠几秒后继续运行
此时需要检测控制服务器的CPU资源使用信息,用于做判断程序是否休眠
resource 模块用于测量和控制程序使用的系统资源的基本机制
二、resource 基本用法
2.1 资源限制
resource.RLIM_INFINITY无限资源的限制resource.getrlimit(resource)当前资源软硬限制的元组(soft, hard)resource.setrlimit(resource, limits)设置新的资源消耗限制 limits 两个整数的元组resource.prlimit(pid, resource[, limits])setrlimit()将和结合getrlimit()在一个函数中,支持获取和设置任意进程的资源限制 如果 pid为0,则调用适用于当前进程 resource和limits与中的含义相同setrlimit(),limits可选 当没有给出限制时,该函数返回进程pid的资源限制 当给定限制时,设置进程的资源限制并返回以前的资源限制import resource# 进程可用存储区大小 soft, hard = resource.getrlimit(resource.RLIMIT_AS) # 进程最大处理器时间 soft, hard = resource.getrlimit(resource.RLIMIT_CPU)# 设置cpu最大处理时间 resource.setrlimit(resource.RLIMIT_CPU, (seconds, hard)) # 设置进程内存限制,程序运行到没有多余内存时会抛出 MemoryError 异常 resource.setrlimit(resource.RLIMIT_AS, (size, hard))resource 解释 说明 resource.RLIMIT_AS 进程可用存储区大小 resource.RLIMIT_CPU 进程最大处理器时间 超出限制SIGXCPU则会向进程发送信号 resource.RLIMIT_FSIZE 进程可创建文件的最大值 resource.RLIMIT_CORE core文件最大字节 resource.RLIMIT_DATA 进程堆的最大大小 数据段最大长度 resource.RLIMIT_MEMLOCK 可锁定在内存中的最大地址空间 使用mlock能否在存储器中锁定最长字节数 resource.RLIMIT_NOFILE 当前进程的最大打开文件数 resource.RLIMIT_NPROC 当前进程可创建的最大进程数 resource.RLIMIT_RSS 供给进程的最大驻存集的字节长度 resource.RLIMIT_STACK 当前进程调用栈的最大长度 resource.RLIMIT_OFILE - resource.RLIMIT_VMEM 进程占用的最大映射内存区域 resource.RLIMIT_MSGQUEUE 分配给POSIX 消息队列的字节数 resource.RLIMIT_NICE 进程 nice 级别的上限 resource.RLIMIT_RTPRIO 实时优先级的上限 resource.RLIMIT_RTTIME 实时优先级的上限 resource.RLIMIT_SIGPENDING 进程可能排队的信号数 resource.RLIMIT_SBSIZE 用户使用的套接字缓冲区的最大大小 resource.RLIMIT_SWAP 该用户 ID 的所有进程保留或使用的交换空间的最大大小 resource.RLIMIT_NPTS 用户标识创建的伪终端的最大数量 resource.RLIMIT_KQUEUES 用户 ID 创建的最大 kqueue 数
2.2 资源使用
resource.getpagesize() 获取页面大小: 返回系统页面中的字节数resource.getrusage(who) 由who参数指定的当前进程或其子进程消耗的资源
import resource# 资源使用状况:请求调用进程消耗的资源,进程中所有线程使用的资源总和
sor = resource.getrusage(resource.RUSAGE_SELF)# 已终止和等待的调用进程的子进程消耗的请求资源
sor = resource.getrusage(resource.RUSAGE_CHILDREN)# 当前进程和子进程消耗的资源 并非在所有系统上都可用
sor = resource.getrusage(resource.RUSAGE_BOTH)# 当前线程消耗的资源 可能并非在所有系统上都可用
sor = resource.getrusage(resource.RUSAGE_THREAD)# 用户模式下的时间(其它参数如下)
print(sor.ru_utime)
| 序号 | 函数 | 描述 |
|---|---|---|
| 0 | ru_utime | 用户模式下的时间 |
| 1 | ru_stime | 系统模式下的时间 |
| 2 | ru_maxrss | 最大驻留集大小 |
| 3 | ru_ixrss | 共享内存大小 |
| 4 | ru_idrss | 非共享堆栈大小 |
| 5 | ru_isrss | 非共享堆栈大小 |
| 6 | ru_minflt | 不需要 I/O 的页面错误 |
| 7 | ru_majflt | 需要 I/O 的页面错误 |
| 8 | ru_nswap | 换出数量 |
| 9 | ru_inblock | 块输入操作 |
| 10 | ru_oublock | 块输出操作 |
| 11 | ru_msgsnd | 已发送消息 |
| 12 | ru_msgrcv | 收到的消息 |
| 13 | ru_nsignals | 收到的信号 |
| 14 | ru_nvcsw | 自愿上下文切换 |
| 15 | ru_nivcsw | 非自愿上下文切换 |
官方文档
三、限制进程的CPU处理时间和内存使用量
import signal
import resource
import os# 限制 CPU 时间
def time_exceeded(signo, frame):# 超时时打印提示信息并引发 SystemExit 异常,以终止脚本print("CPU exceeded...")raise SystemExit(1)def set_max_runtime(seconds):# 获取当前 CPU 时间的软限制和硬限制soft, hard = resource.getrlimit(resource.RLIMIT_CPU)# 设置软限制为指定的时间,硬限制不变resource.setrlimit(resource.RLIMIT_CPU, (seconds, hard))# 安装一个信号处理程序来处理超时信号 SIGXCPUsignal.signal(signal.SIGXCPU, time_exceeded)# 限制内存使用量
def set_max_memory(size):# 获取当前内存使用量的软限制和硬限制soft, hard = resource.getrlimit(resource.RLIMIT_AS)# 设置软限制为指定的大小,硬限制不变resource.setrlimit(resource.RLIMIT_AS, (size, hard))
-
set_max_runtime 函数通过调用 resource 模块中的 getrlimit 和 setrlimit 函数来限制 Python 进程的 CPU 时间。函数首先调用 getrlimit 函数获取当前 CPU 时间的软限制和硬限制,然后将软限制设置为指定的时间,将硬限制保持不变。最后,该函数调用 signal 模块中的 signal 函数,安装一个处理超时信号 SIGXCPU 的信号处理程序,该处理程序在超时时打印一条提示信息并引发 SystemExit 异常以终止脚本。
-
set_max_memory 函数同样使用 getrlimit 和 setrlimit 函数来限制 Python 进程的内存使用量。该函数首先调用 getrlimit 函数获取当前内存使用量的软限制和硬限制,然后将软限制设置为指定的大小,将硬限制保持不变。
相关文章:
python 之 资源使用与控制 resource模块
一、背景 2021年做可信计算时,由于甲方给的CPU利用率不能不能超过20%; 目的:我们的程序部署甲方服务器上不能阻碍其甲方服务的正常运行 我们的程序在CPU超过20%时,可以休眠几秒后继续运行 此时需要检测控制服务器的CPU资源使用信…...
蓝库云|8项关键让你看透企业「数字转型」,零代码是惊喜
各行各业都要面对的多方竞争力及不断上涨的经营成本,以及随着时代的发展,有不少企业纷纷推动数字化转型,考虑藉着应用现代化的数据和科技工具的结合,协助企业创造新的营运模式及收入来源,以提升自动化效率、优化客户体…...
(五)、编辑页面-发布长文-富文本编辑【uniapp+uinicloud多用户社区博客实战项目(完整开发文档-从零到完整项目)】
1,edit页面 1.1 新建edit页面 1.2 从本地相册选择图片或使用相机拍照。 uni.chooseImage(OBJECT) 1.3 直接上传文件到云存储。 uploadFile(Object object) 1.4 从富文本编辑器获取编辑器内容 editorContext.getContents(OBJECT) 首页富文本编辑器初始化完成时…...
你是真的“C”——【经典面试知识点】数据在内存中的大小端存储方式
你是真的“C”——【经典面试知识点】数据在内存中的大小端存储方式😎前言🙌大小端介绍🙌什么大端小端呢?:大小端存储的标准定义:大端和小端存在的意义经典的面试题目🙌总结撒花💞&a…...
从零开始的数模(二十六)单因素方差分析
目录 一、概念 1.1相关概念 1.2用途 1.3数据要求:独立性/正态性/方差齐性 1.4步骤 编辑1.5专业名词 二、基于python的单因素方差分析 2.2单因素方差分析的作用 一、概念 1.1相关概念 单因素方差分析是一种常用的统计分析方法,它用于比较一个因…...
C++变量类型
目录 一、c中的变量定义 二、c中的变量声明 三、c中的左值和右值 一、c中的变量定义 变量定义就是告诉编译器在何处创建变量的存储,以及如何创建变量的存储。 变量定义指定一个数据类型,并包含了该类型的一个或多个变量的列表,如下所示&…...
win10 安装 vs2015(社区版本)以及opencv-4.5.5
一、下载vs2015以及opencv-4.5.5从https://msdn.itellyou.cn/ 网站下载vs2015(社区版本)从https://opencv.org/releases/网站下载opencv-4.5.5二、安装vs2015和opencv-4.5.5解压后双击exe安装文件,完成安装(默认)双击下…...
867. 转置矩阵
给你一个二维整数数组 matrix, 返回 matrix 的 转置矩阵 。矩阵的 转置 是指将矩阵的主对角线翻转,交换矩阵的行索引与列索引。示例 1:输入:matrix [[1,2,3],[4,5,6],[7,8,9]]输出:[[1,4,7],[2,5,8],[3,6,9]]示例 2&a…...
Datawahle组队学习——妙趣横生大数据 Day1
妙趣横生大数据 Day1[妙趣横生大数据 Juicy Big Data](https://datawhalechina.github.io/juicy-bigdata/#/?id妙趣横生大数据-juicy-big-data)一、大数据概述大数据——第三次信息化浪潮大数据概念大数据应用大数据关键技术二、Hadoop背景介绍特性项目架构实验1. 准备工作2. …...
网友眼中越老越吃香的行业,果然是风向变了!
越老越吃香的行业,一直都是被热议的话题。对于年轻人来说,找到一个适合自己的并且具有前景的工作,不是一件容易的事情。 最近,看到有人在平台上问相关的问题,本着认真看一看的态度点进去,却差点被热评第一…...
为什么时间序列预测这么难?本文将给你答案
机器学习和深度学习已越来越多应用在时序预测中。ARIMA 或指数平滑等经典预测方法正在被 XGBoost、高斯过程或深度学习等机器学习回归算法所取代。 尽管时序模型越来越复杂,但人们对时序模型的性能表示怀疑。有研究表明,复杂的时序模型并不一定会比时序…...
STC15系列单片机通过串口多字节数据读写EEPROM操作
STC15系列单片机通过串口多字节数据读写EEPROM操作📌相关篇《STC15系列单片机EEPROM读写示例》 ⛳手册勘误信息注意事项 ⚡在手册上面描述STC15F2K60S2及STC15L2K60S2系列单片机内部EEPROM还可以用MOVC指令读,但此时首地址不再是0000H,而是程…...
计算机网络-ip数据报
在图中,网络层包含了四种协议:ARP、IP、ICMP、IGMP,由上下关系表明,ARP为IP协议服务,IP为ICMP和IGMP服务。 IP数据报格式 此处不区分数据报和分组的概念:当数据部分过长时,将数据部分拆分&…...
从零开始学C
以下是 该如何学习C语言的【思维导图】以及部分重点知识点的【博客链接】。其实C语言并不难,难的是没有人去教,没有耐心去学。不知道从哪下手学习,我将C的知识点做成一个思维导图,以供迷茫的小白参考,哪里不会…...
【云原生】手把手带你从零开始搭建kubernetes最新版本实战
文章目录前言一. 实验环境二. k8s 的介绍三 . k8s的安装3.1 搭建实验环境3.1.1 硬件层面的要求3.1.2 软件层面环境配置3.2 docker的安装3.2.1 搭建docker3.2.2 部署 cri-dockerd3.3 部署k8s3.3.1 配置添加阿里云的yum源3.3.2 安装kubeadm kubelet kubectl3.3.3 k8s-master节点初…...
trivy os软件包扫描原理分析
具体可以基于之前的博客来做 基于trivy获取基础镜像 参数修改一下: cliOpt.ListAllPkgs true 结果中会带有如下格式的结果: "Results":[{"Target":"192.168.1.94:443/test22/centos:7 (centos 7.9.2009)","Clas…...
算法训练营 day48 动态规划 完全背包 零钱兑换 II 组合总和 Ⅳ
算法训练营 day48 动态规划 完全背包 零钱兑换 II 组合总和 Ⅳ 完全背包 有N件物品和一个最多能背重量为W的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。每件物品都有无限个(也就是可以放入背包多次),求解将哪些物…...
Java 基础(1)—泛型简单使用
一、泛型定义及作用 泛型是一种编程机制,允许在编写代码时使用参数化类型,以在编译时实现类型安全。 以下是泛型作用: 增强代码可读性和可维护性:通过在代码中使用泛型参数,可以使代码更清晰、更具有可读性和可维护性…...
内存卡损坏了怎么恢复?
内存卡损坏了怎么恢复?现在我们身边有不少电子设备都是用存储卡来存储数据的。一旦需要方便我们直接导出使用。但这存储的数据也不是一定安全的,当我们将内存卡连接到电脑时,难免会碰到病毒、格式化等提示,在这些情况下,可能会导…...
Mysql使用规范(纯技术和实战建议)
1、事务隔级别: (强制):Repeatable-Read(重复读),且不能在会话操作时临时开启隔离级别。 注: Repeatable-Read(重复读)隔离级别解决不了幻读。 可用 show variables l…...
【大模型RAG】Docker 一键部署 Milvus 完整攻略
本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装;只需暴露 19530(gRPC)与 9091(HTTP/WebUI)两个端口,即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...
Golang dig框架与GraphQL的完美结合
将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...
华为OD机试-食堂供餐-二分法
import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...
SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现
摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序,以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务,提供稳定高效的数据处理与业务逻辑支持;利用 uniapp 实现跨平台前…...
Python爬虫(一):爬虫伪装
一、网站防爬机制概述 在当今互联网环境中,具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类: 身份验证机制:直接将未经授权的爬虫阻挡在外反爬技术体系:通过各种技术手段增加爬虫获取数据的难度…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
Device Mapper 机制
Device Mapper 机制详解 Device Mapper(简称 DM)是 Linux 内核中的一套通用块设备映射框架,为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程,并配以详细的…...
关键领域软件测试的突围之路:如何破解安全与效率的平衡难题
在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件,这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下,实现高效测试与快速迭代?这一命题正考验着…...
Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)
在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马(服务器方面的)的原理,连接,以及各种木马及连接工具的分享 文件木马:https://w…...
MFC 抛体运动模拟:常见问题解决与界面美化
在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...
