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…...
Linux安全加固:从攻防视角构建系统免疫
Linux安全加固:从攻防视角构建系统免疫 构建坚不可摧的数字堡垒 引言:攻防对抗的新纪元 在日益复杂的网络威胁环境中,Linux系统安全已从被动防御转向主动免疫。2023年全球网络安全报告显示,高级持续性威胁(APT)攻击同比增长65%,平均入侵停留时间缩短至48小时。本章将从…...
门静脉高压——表现
一、门静脉高压表现 00:01 1. 门静脉构成 00:13 组成结构:由肠系膜上静脉和脾静脉汇合构成,是肝脏血液供应的主要来源。淤血后果:门静脉淤血会同时导致脾静脉和肠系膜上静脉淤血,引发后续系列症状。 2. 脾大和脾功能亢进 00:46 …...
基于Uniapp的HarmonyOS 5.0体育应用开发攻略
一、技术架构设计 1.混合开发框架选型 (1)使用Uniapp 3.8版本支持ArkTS编译 (2)通过uni-harmony插件调用原生能力 (3)分层架构设计: graph TDA[UI层] -->|Vue语法| B(Uniapp框架)B --&g…...
五、jmeter脚本参数化
目录 1、脚本参数化 1.1 用户定义的变量 1.1.1 添加及引用方式 1.1.2 测试得出用户定义变量的特点 1.2 用户参数 1.2.1 概念 1.2.2 位置不同效果不同 1.2.3、用户参数的勾选框 - 每次迭代更新一次 总结用户定义的变量、用户参数 1.3 csv数据文件参数化 1、脚本参数化 …...
RLHF vs RLVR:对齐学习中的两种强化方式详解
在语言模型对齐(alignment)中,强化学习(RL)是一种重要的策略。而其中两种典型形式——RLHF(Reinforcement Learning with Human Feedback) 与 RLVR(Reinforcement Learning with Ver…...
java 局域网 rtsp 取流 WebSocket 推送到前端显示 低延迟
众所周知 摄像头取流推流显示前端延迟大 传统方法是服务器取摄像头的rtsp流 然后客户端连服务器 中转多了,延迟一定不小。 假设相机没有专网 公网 1相机自带推流 直接推送到云服务器 然后客户端拉去 2相机只有rtsp ,边缘服务器拉流推送到云服务器 …...
第14节 Node.js 全局对象
JavaScript 中有一个特殊的对象,称为全局对象(Global Object),它及其所有属性都可以在程序的任何地方访问,即全局变量。 在浏览器 JavaScript 中,通常 window 是全局对象, 而 Node.js 中的全局…...
无头浏览器技术:Python爬虫如何精准模拟搜索点击
1. 无头浏览器技术概述 1.1 什么是无头浏览器? 无头浏览器是一种没有图形用户界面(GUI)的浏览器,它通过程序控制浏览器内核(如Chromium、Firefox)执行页面加载、JavaScript渲染、表单提交等操作。由于不渲…...
八、【ESP32开发全栈指南:UDP客户端】
1. 环境准备 安装ESP-IDF v4.4 (官方指南)确保Python 3.7 和Git已安装 2. 创建项目 idf.py create-project udp_client cd udp_client3. 完整优化代码 (main/main.c) #include <string.h> #include "freertos/FreeRTOS.h" #include "freertos/task.h&…...
设计模式域——软件设计模式全集
摘要 软件设计模式是软件工程领域中经过验证的、可复用的解决方案,旨在解决常见的软件设计问题。它们是软件开发经验的总结,能够帮助开发人员在设计阶段快速找到合适的解决方案,提高代码的可维护性、可扩展性和可复用性。设计模式主要分为三…...
