当前位置: 首页 > news >正文

【教程】Python实时检测CPU和GPU的功耗

目录

前言

GPU功耗检测方法

CPU功耗检测方法

sudo的困扰与解决

完整功耗分析示例代码


转载请注明出处:小锋学长生活大爆炸[xfxuezhang.cn]

前言

        相关一些检测工具挺多的,比如powertop、powerstat、s-tui等。但如何通过代码的方式来实时检测,是个麻烦的问题。通过许久的搜索和自己的摸索,发现了可以检测CPU和GPU功耗的方法。如果有什么不对,或有更好的方法,欢迎评论留言!

        文末附完整功耗分析的示例代码

GPU功耗检测方法

        如果是常规的工具,可以使用官方的NVML。但这里需要Python控制,所以使用了对应的封装:pynvml。

        先安装:

pip install pynvml

     关于这个库,网上的使用教程挺多的。这里直接给出简单的示例代码:

import pynvml
pynvml.nvmlInit()handle = pynvml.nvmlDeviceGetHandleByIndex(0)
powerusage = pynvml.nvmlDeviceGetPowerUsage(handle) / 1000

        这个方法获取的值,跟使用“nvidia-smi”指令得到的是一样的。

         附赠一个来自网上的获取更详细信息的函数:

def get_sensor_values():"""get Sensor values:return:"""values = list()# get gpu driver versionversion = pynvml.nvmlSystemGetDriverVersion()values.append("GPU_device_driver_version:" + version.decode())gpucount = pynvml.nvmlDeviceGetCount()  # 显示有几块GPUfor gpu_id in range(gpucount):handle = pynvml.nvmlDeviceGetHandleByIndex(gpu_id)name = pynvml.nvmlDeviceGetName(handle).decode()meminfo = pynvml.nvmlDeviceGetMemoryInfo(handle)# print(meminfo.total)  # 显卡总的显存大小gpu_id = str(gpu_id)values.append("GPU " + gpu_id + " " + name + " 总共显存大小:" + str(common.bytes2human(meminfo.total)))# print(meminfo.used)  # 显存使用大小values.append("GPU " + gpu_id + " " + name + " 显存使用大小:" + str(common.bytes2human(meminfo.used)))# print(meminfo.free)  # 显卡剩余显存大小values.append("GPU " + gpu_id + " " + name + " 剩余显存大小:" + str(common.bytes2human(meminfo.free)))values.append("GPU " + gpu_id + " " + name + " 剩余显存比例:" + str(int((meminfo.free / meminfo.total) * 100)))utilization = pynvml.nvmlDeviceGetUtilizationRates(handle)# print(utilization.gpu)  # gpu利用率values.append("GPU " + gpu_id + " " + name + " GPU利用率:" + str(utilization.gpu))powerusage = pynvml.nvmlDeviceGetPowerUsage(handle)# print(powerusage / 1000) # 当前功耗, 原始单位是mWavalues.append("GPU " + gpu_id + " " + name + " 当前功耗(W):" + str(powerusage / 1000))# 当前gpu power capacity# pynvml.nvmlDeviceGetEnforcedPowerLimit(handle)# 通过以下方法可以获取到gpu的温度,暂时采用ipmi sdr获取gpu的温度,此处暂不处理# temp = pynvml.nvmlDeviceGetTemperature(handle,0)print('\n'.join(values))return values

CPU功耗检测方法

        这个没有找到开源可以直接用的库。但经过搜索,发现大家都在用的s-tui工具是开源的!通过查看源码,发现他是有获取CPU功耗部分的代码,所以就参考他的源码写了一下。

        先安装:

sudo apt install s-tui
pip install s-tui

        先直接运行工具看一下效果(不使用sudo是不会出来Power的):

sudo s-tui

        说明这个工具确实能获取到CPU的功耗。其中package就是2个CPU,dram是内存条功耗(一般不准,可以不用)。

        直接给出简单的示例代码:

from s_tui.sources.rapl_power_source import RaplPowerSourcesource.update()
summary = dict(source.get_sensors_summary())cpu_power_total = str(sum(list(map(float, [summary[key] for key in summary.keys() if key.startswith('package')]))))

        不过注意!由于需要sudo权限,所以运行这个py文件时候,也需要sudo方式,比如:

sudo python demo.py

sudo的困扰与解决

        上面提到,由于必须要sudo方式,但sudo python就换了运行脚本的环境了呀,这个比较棘手。后来想了个方法,曲线救国一下。通过sudo运行一个脚本,并开启socket监听;而我们自己真正的脚本,在需要获取CPU功耗时候,连接一下socket就行。

        为什么这里使用socket而不是http呢?因为socket更高效一点!

我们写一个“power_listener.py”来监听:

from s_tui.sources.rapl_power_source import RaplPowerSource
import socket
import jsondef output_to_terminal(source):results = {}if source.get_is_available():source.update()source_name = source.get_source_name()results[source_name] = source.get_sensors_summary()for key, value in results.items():print(str(key) + ": ")for skey, svalue in value.items():print(str(skey) + ": " + str(svalue) + ", ")source = RaplPowerSource()
# output_to_terminal(source)s = socket.socket()
host = socket.gethostname()
port = 8888
s.bind((host, port))
s.listen(5)
print("等待客户端连接...")
while True:c, addr = s.accept()source.update()summary = dict(source.get_sensors_summary())#msg = json.dumps(summary)# package表示CPU,dram表示内存(一般不准)power_total = str(sum(list(map(float, [summary[key] for key in summary.keys() if key.startswith('package')]))))print(f'发送给{addr}:{power_total}')c.send(power_total.encode('utf-8'))c.close()                # 关闭连接

        因此,在需要获取CPU功耗时候,只需要:

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = socket.gethostname()
port = 8888
s.connect((host, port))
msg = s.recv(1024)
s.close()
power_usage_cpu = float(msg.decode('utf-8'))

完整功耗分析示例代码

        提供一个我自己编写和使用的功耗分析代码,仅供参考。(注意上面的power_listener.py需要运行着)

import cv2
import socket
import sys
import threading
import json
import statistics
from psutil import _common as common
import pynvml
pynvml.nvmlInit()class Timer: def __init__(self, name = '', is_verbose = False):self._name = name self._is_verbose = is_verboseself._is_paused = False self._start_time = None self._accumulated = 0 self._elapsed = 0         self.start()def start(self):self._accumulated = 0         self._start_time = cv2.getTickCount()def pause(self): now_time = cv2.getTickCount()self._accumulated += (now_time - self._start_time)/cv2.getTickFrequency() self._is_paused = True   def resume(self): if self._is_paused: # considered only if paused self._start_time = cv2.getTickCount()self._is_paused = False                      def elapsed(self):if self._is_paused:self._elapsed = self._accumulatedelse:now = cv2.getTickCount()self._elapsed = self._accumulated + (now - self._start_time)/cv2.getTickFrequency()        if self._is_verbose is True:      name =  self._nameif self._is_paused:name += ' [paused]'message = 'Timer::' + name + ' - elapsed: ' + str(self._elapsed) timer_print(message)return self._elapsed   class PowerUsage:'''demo:power_usage = PowerUsage()power_usage.analyze_start()time.sleep(2)time_used, power_usage_gpu, power_usage_cpu = power_usage.analyze_end()print(time_used)print(power_usage_gpu)print(power_usage_cpu)'''def __init__(self):self.start_analyze = Falseself.power_usage_gpu_values = list()self.power_usage_cpu_values = list()self.thread = Noneself.timer = Timer(name='GpuPowerUsage', is_verbose=False)def analyze_start(self, gpu_id=0, delay=0.1):handle = pynvml.nvmlDeviceGetHandleByIndex(gpu_id)def start():self.power_usage_gpu_values.clear()self.power_usage_cpu_values.clear()self.start_analyze = Trueself.timer.start()while self.start_analyze:powerusage = pynvml.nvmlDeviceGetPowerUsage(handle)self.power_usage_gpu_values.append(powerusage/1000)s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)host = socket.gethostname()port = 8888s.connect((host, port))msg = s.recv(1024)s.close()self.power_usage_cpu_values.append(float(msg.decode('utf-8')))time.sleep(delay)self.thread = threading.Thread(target=start, daemon=True)self.thread.start()def analyze_end(self, mean=True):self.start_analyze = Falsewhile self.thread and self.thread.isAlive():time.sleep(0.01)time_used = self.timer.elapsed()self.thread = Nonepower_usage_gpu = statistics.mean(self.power_usage_gpu_values) if mean else self.power_usage_gpu_valuespower_usage_cpu = statistics.mean(self.power_usage_cpu_values) if mean else self.power_usage_cpu_valuesreturn time_used, power_usage_gpu, power_usage_cpupower_usage = PowerUsage()
def power_usage_api(func, note=''):@wraps(func)def wrapper(*args, **kwargs):power_usage.analyze_start()result = func(*args, **kwargs)print(f'{note}{power_usage.analyze_end()}')return resultreturn wrapperdef power_usage_api2(note=''):def decorator(func):@wraps(func)def wrapper(*args, **kwargs):power_usage.analyze_start()result = func(*args, **kwargs)print(f'{note}{power_usage.analyze_end()}')return resultreturn wrapperreturn decorator

        用法示例:

power_usage = PowerUsage()
power_usage.analyze_start()
# ----------------------
# xxx 某一段待分析的代码
# 这里以sleep表示运行时长
time.sleep(2)
# ----------------------
time_used, power_usage_gpu, power_usage_cpu = power_usage.analyze_end()
print(f'time_used: {time_used}')
print(f'power_usage_gpu: {power_usage_gpu}')
print(f'power_usage_cpu: {power_usage_cpu}')

相关文章:

实验二:需求分析

一、实验题目 :需求分析 **二、实验目的 ** 1、掌握StarUML软件的安装; 2、掌握利用StarUML工具分析、设计、绘制用例图; 3、掌握利用StarUML工具分析、设计、绘制类图; 4、掌握利用StarUML工具分析、设计、绘制状态图; 5、掌握利用StarUML工具分析、设计、绘制顺序图。 6…...

golang面试题

基础题 Go 的优势是什么? 天然支持并发,通过Goroutine和通道实现的支持静态链接,将程序依赖的库文件在编译时直接链接到可执行文件中,形成一个独立的可执行文件,这样可执行文件就包含了所有运行所需的代码和库,无需…...

Codes 重新定义 SaaS 模式的研发项目管理平台开源版 4.5.3 发布

Codes 是一个 开源、高效、简洁、轻量的一站式研发项目管理平台。包含需求管理,任务管理,测试管理,缺陷管理,自动化测试,cicd 等功能; Codes 重新定义 SaaS 模式 = 云端认证 + 程序及数据本地安装 + 不限功能 + 30 人免费一:简介Codes 重新定义 SaaS 模式 = 云端认证 …...

蓝桥杯2024年第十五届省赛真题-宝石组合

思路:参考博客,对Ha,Hb,Hc分别进行质因数分解会发现,S其实就等于Ha,Hb,Hc的最大公约数,不严谨推导过程如下(字丑勿喷): 找到此规律后,也不能枚举Ha&#xff…...

深入探索Hadoop技术:全面学习指南

引言 在大数据时代,高效地存储、处理和分析海量数据已成为企业决策与创新的关键驱动力。Hadoop,作为开源的大数据处理框架,以其强大的分布式存储和并行计算能力,以及丰富的生态系统,为企业提供了应对大规模数据挑战的有…...

知识跟踪模型GraphKT

1 知识跟踪Knowledge Tracing的概念 知识跟踪可以用来解决自适应学习问题。如何通过与教学材料的在线互动来有效地跟踪学生的学习进展?知识跟踪可用于量化学生的知识状态,即对教材所涉及的技能掌握水平。用于评估和模拟学生随着时间推移对技能的认知掌握…...

【教程】Python实时检测CPU和GPU的功耗

目录 前言 GPU功耗检测方法 CPU功耗检测方法 sudo的困扰与解决 完整功耗分析示例代码 转载请注明出处:小锋学长生活大爆炸[xfxuezhang.cn] 前言 相关一些检测工具挺多的,比如powertop、powerstat、s-tui等。但如何通过代码的方式来实时检测&#xf…...

ESP32设备驱动-MCP4725数模转换器驱动

MCP4725数模转换器驱动 1、MCP4725介绍 MCP4725 是一款单通道、12 位、电压输出数模转换器,具有集成 EEPROM 和 I2C 兼容串行接口。MCP4725有如下特性: 12 位分辨率板载非易失性存储器 (EEPROM)0.2 LSB DNL(典型值)外部 A0 地址引脚正常或掉电模式6s(典型值)的快速建立…...

电商项目之同一笔单多次收款成功

1 问题背景 有个收单系统(简称S系统),作用是收单,相当于支付渠道,能够作为第三方服务对接其他支付平台。电商系统(简称A系统)与S系统是隔离的。A系统发起支付请求给S系统,S系统包装一…...

Dubbo 源码分析 – SPI 机制

1.简介 SPI 全称为 Service Provider Interface,是一种服务发现机制。SPI 的本质是将接口实现类的全限定名配置在文件中,并由服务加载器读取配置文件,加载实现类。这样可以在运行时,动态为接口 加载实现类。正因此特性&#xff0…...

spring笔记下(AOP、事务管理)

一、AOP概述 1. AOP介绍 AOP(Aspect Oriented Programming):面向切面编程,一种编程范式,指导开发者如何组织程序结构,是oop的延续。(OOP面向对象编程) AOP作用:在不惊动原始设计的基础上为其进…...

Java基础语法——方法

目录 方法概述 方法定义及格式 方法重载 •方法重载概述 •方法重载特点 方法中基本数据类型和引用数据类型的传递 方法概述 ——假设有一个游戏程序,程序在运行过程中,要不断地发射炮弹(植物大战僵尸)。发射炮弹的动作需要编写100行的代码&…...

逆序遍历List集合

1 问题手写一个程序,完成List集合对象的逆序遍历2 方法创建List接口的多态对象向创建好list集合添加元素使用hasPrevious方法。import java.util.ArrayList;import java.util.List;import java.util.ListIterator;public class TestList { public static void ma…...

RISC-V Directives

原始内容如下: RISC-V Directives The following table lists all available RISC-V specific directives. .align size-log-2 Align to the given boundary, with the size given as log2 the number of bytes to align to. .half value .word value .dword valu…...

Day870.全局锁和表锁 -MySQL实战

全局锁和表锁 Hi,我是阿昌,今天学习记录的是关于全局锁和表锁的内容。 数据库锁设计的初衷是处理并发问题。 作为多用户共享的资源,当出现并发访问的时候,数据库需要合理地控制资源的访问规则。锁就是用来实现这些访问规则的重…...

python语法 dot函数

dot是numpy里的函数,主要用于求向量相乘,矩阵乘法,矩阵与向量乘法一、一维向量相乘要求元素个数相同,相当于求内积,对应元素相乘再相加,“1*3 2*4 11”二、矩阵和矩阵相乘遵循矩阵乘法法则“左行 * 右列”…...

Java多线程与并发之线程同步[91]

Java多线程与并发之线程同步[91] 文章目录Java多线程与并发之线程同步[91]一、线程同步概念二、代码演示三.小结一、线程同步概念 线程同步:同步会牺牲性能,加强安全 1.多线程共享数据时,会发生数据不安全情况; 2.多线程共享数据时,必须使用同步; 线程同步三种操作: 1.同步代码…...

C语言基础知识(42)

数组作为函数参数数组可以由整个数组当作函数的参数,也可以由数组中的某个元素当作函数的参数:整个数组当作函数参数,即把数组名称传入函数中数组中的元素当作函数参数,即把数组中的参数传入函数中数组作为函数参数时注意以下事项…...

嵌入式复习题(三)判断题

1.Contex-M3系列处理器内核采用了冯诺依曼结构的三级流水线。( ) 2.STM32系列MCU在使用电池供电时,提供3.3~5V的低电压工作能力。( ) 3.stm3210xx的固件库中,RCC_DeInit函数是将RCC寄存器重新设置为…...

Qt基础之二十三:反射(Reflection)

反射是指程序在运行时动态获取对象属性与方法的一种机制,即编译器需要将类型信息(属性类型与偏移地址以及成员函数的地址等信息)编译到程序文件中,当程序运行时将这些信息加载到内存中去,做到运行时只根据对象的地址或引用就可以获取到对象的类型信息,从而利用这些信息达到…...

AD采集之离散化概念(Quantizer模型使用介绍)

模拟量采集的PLC程序和功能块算法,可以参看下面的文章链接: PLC模拟量采集算法数学基础(线性传感器)_RXXW_Dor的博客-CSDN博客_模拟量采集线性校准模拟量采集库如何设计,具体算法代码请参看我的另一篇博文:PLC模拟量输入 模拟量转换FC:S_ITR_RXXW_BOSS的博客-CSDN博客_…...

【学习笔记】线性递推数列

1.11.11.1 定义:对于无限数列{a0,a1,a2,...}\{a_0,a_1,a_2,...\}{a0​,a1​,a2​,...}和有限非空数列{r0,r1,r2,...,rm−1}\{r_0,r_1,r_2,...,r_{m-1}\}{r0​,r1​,r2​,...,rm−1​},若对于任意p≥m−1p\ge m-1p≥m−1,有∑k0m−1ap−krk0\s…...

第一次找工作/实习前需要准备的东西(互联网行业)

文章目录一、简历二、笔试三、面试四、offer选择五、投递途径一、简历 详细模板之类的网上一搜都很多,各种网站,在线的,word的,latex的都可以。 主要讲几个个人感觉写的时候需要关注一下的点。 1、个人信息 让hr联系到你&#x…...

【二叉树】java实现代码,详解二叉树,带大家更深刻的掌握二叉树递归思想

前言: 大家好,我是良辰丫🪐🪐🪐,在探索数据结构的旅程中,二叉树可以说是数据结构中的重点,笔试面试经常出现的问题,同时也是难点。🐥🐥&#x1f4…...

【论文翻译】Jointformer :一种基于误差预测和改进的三维人体姿态估计的单帧提升变压器

摘要 单目三维人体姿态估计技术有望极大地提高人体运动数据的可用性。表现最好的单幅图像2D3D提升模型使用图卷积网络(GCNs),通常需要一些手动输入来定义不同身体关节之间的关系。我们提出了一种新的基于变压器的方法,该方法使用更广泛的自我注意机制来…...

Linux用户管理

✅作者简介:热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏:Java案例分…...

第四十六章 动态规划——状态机模型

第四十六章 动态规划——状态机模型一、通俗理解状态机DP1、什么是状态机2、什么是状态机DP二、例题1、AcWing 1049. 大盗阿福(1)问题(2)分析a.状态定义b.状态转移c.循环设计d.初末状态(3)代码2、AcWing 10…...

Idea中指定xml文件失效

目录一、🐇 项目场景:二、🐇 问题描述三、🐇 原因分析:四、🐇 解决方案:一、🐇 项目场景: 最近狮子在搞一个项目,需要用到数据库多表查询,所以在…...

【华为上机真题】工号不够用咋办

🎈 作者:Linux猿 🎈 简介:CSDN博客专家🏆,华为云享专家🏆,Linux、C/C、云计算、物联网、面试、刷题、算法尽管咨询我,关注我,有问题私聊! &…...

【蓝桥云课】大整数相加与相乘——字符串模拟

一、大整数相加 思路分析: 输入两个整数a1456、b789,输出两个整数相加的结果。 ①将两个整数翻转 个位十位百位千位a6541b9870 ②相加计算,逢十进一 a0b06915a_0b_06915a0​b0​6915(进1留5) a1b158114a_1b_158114a…...

泊松过程与排队论

全国同理:随机过程随机会过 ......唉 你说热统,他为什么要搭配着随机过程一起学 ......唉 你说数模比赛 为什么不能白送一个奖牌小摘要泊松过程泊松过程来到间隔与等待时间的分布来到时刻的条件分布M/G/1 忙期非齐次泊松过程复合泊松过程条件泊松过程排队系统输入常见的输入分布…...

告别3D-DNA试试chromap和yahs做Hi-C辅助组装吧

之前使用的是3D-DNA流程做Hi-C的辅助组装,它的最大优势就是输出结果可以对接下游的JBAT(juicerbox with Assembly Tools)进行手动矫正。然而它点缺陷也很明显,处理速度不够快,且对植物的优化不行,同时目前许久不更新了。 最近我发…...

Kettle(9):排序记录组件

1 组件介绍 排序组件可以将Kettle数据流中的数据进行排序,可以指定升序、还是降序排列 2 需求 使用Kettle将t_user表中的用户数据,按照年龄升序排序,并将排序后的数据装载到Excel 3 构建Kettle数据流图 效果图...

LVS+keepalived(双主)+Nginx实现高可用负载均衡

#为什么采用双主架构: 单主架构只有一个keepalived对外提供服务,该主机长期处于繁忙状态,而另一台主机却很空闲,利用率低下 #双主架构的优点: 即将两个或以上VIP分别运行在不同的keepalived服务器,以实现…...

力扣 2299. 强密码检验器 II

题目 如果一个密码满足以下所有条件,我们称它是一个 强 密码: 它有至少 8 个字符。 至少包含 一个小写英文 字母。 至少包含 一个大写英文 字母。 至少包含 一个数字 。 至少包含 一个特殊字符 。特殊字符为:“!#$%^&*()-” 中的一个。…...

[GWCTF 2019]枯燥的抽奖

目录 信息收集 知识回顾 解题思路 信息收集 查看源码&#xff0c;发现check.php <?php #这不是抽奖程序的源代码&#xff01;不许看&#xff01; header("Content-Type: text/html;charsetutf-8"); session_start(); if(!isset($_SESSION[seed])){ $_SESSIO…...

初入职场的我认识到linux的重要性

先自我介绍下&#xff0c;我是一名普通的软件工程专业的本科毕业生&#xff0c;今年刚毕业&#xff0c;软件工程的课程超级多&#xff0c;有程序设计基础、面向对象程序设计、软件工程导论、离散结构、数据结构与算法、计算机系统基础、操作系统、数据库概论、网络及其计算等等…...

数据库系统概述

文章目录一、数据、数据库、数据库管理系统、数据库系统1.数据2.数据库&#xff08;DB&#xff09;3.数据库管理系统&#xff08;DBMS&#xff09;1&#xff09;数据定义2&#xff09;数据组织、存储和管理3&#xff09;数据操纵4&#xff09;事务管理和运行管理5&#xff09;数…...

【算法基础】快速排序(分治思想)

一、快速排序原理 1. 算法介绍 快速排序算法通过多次比较和交换来实现排序,其排序流程如下: (1)首先设定一个分界值,通过该分界值将数组分成左右两部分。(记左端为L,最右端为R) 分界点的选取有如下四种方法:(1)q[L];(2)q[(L+R)/2];(3)q[R];(4)随机选取 (2)…...

JavaEE-初识网络

目录一、局域网二、广域网三、网络通信基础3.1 IP地址3.2 端口号3.3 协议四、协议分层五、封装和分用一、局域网 局域网&#xff0c;网络种类&#xff0c;覆盖范围一般是方圆几千米之内&#xff0c;其具备的安装便捷、成本节约、扩展方便等特点使其在各类办公室内运用广泛。局…...

【23】C语言 | 初阶结构体

目录 1、结构的基础知识 2、结构成员的类型 3、结构体初始化 4、结构体的访问 5、结构体传参 1、结构的基础知识 结构是这些值的集合&#xff0c;这些值称为成员变量。结构的每个成员可以是不同类型的变量 数组&#xff1a;一组相同类型的元素的集合 结构体&#xff1a;也是…...

【笔记】SemGCN

一. 论文总结 1.1 核心贡献 提出了一种改进的图卷积操作&#xff0c;称为语义图卷积(SemGConv)&#xff0c;它源自cnn。其关键思想是学习图中暗示的边的信道权值&#xff0c;然后将它们与核矩阵结合起来。这大大提高了图卷积的能力。其次&#xff0c;我们引入了SemGCN&#x…...

Python机器学习:一元回归

→\rightarrow→回归效果评价 &#x1f315; 一元回归 一元回归主要研究一个自变量和一个因变量之间的关系&#xff0c;而这个自变量和因变量之间的关系又可分为线性回归和非线性回归。 ⭐️ 一元线性回归分析两个变量之间的线性关系&#xff0c;如ykxbykxbykxb中xxx和yyy就是…...

四轮两驱小车(三):STM32驱动MPU6050进行转弯

前言&#xff1a; 寒假已经过了一半了&#xff0c;前段时间跟学弟一起从零开始搞了一下深度学习&#xff0c;现在才想起来这个系列还没有更完。本篇博客主要介绍一下这个小车转直角弯的神器----MPU6050 MPU6050介绍&#xff1a; 我所采用的MPU6050是某宝上十几块钱的这种&…...

C++:类的static成员,友元和构造函数初始化列表

目录 一.类的构造函数的初始化列表 1.类的构造函数初始化列表的引入和介绍 2.初始化列表用于类的类对象成员的拷贝构造函数的调用 3.初始化列表的使用细则 4.使用初始化列表的一个注意事项 二.explicit关键字 三.C类的static成员 1.类中static修饰的成员变量 2.类中st…...

用友U8和旺店通企业版淘宝奇门单据接口集成

用友U8和旺店通企业奇门单据接口集成对接系统&#xff1a;旺店通企业奇门慧策最先以旺店通ERP切入商家核心管理痛点——订单管理&#xff0c;之后围绕电商经营管理中的核心管理诉求&#xff0c;先后布局流量获取、会员管理、仓库管理等其他重要经营模块。慧策的产品线从旺店通E…...

Java-黑马Java学习作业-day11集合学生管理系统

学习视频链接&#xff1a;https://www.bilibili.com/video/BV17F411T7Ao 文章目录题目1-将数组存放在集合中题目2-教师信息查看题目3-员工信息删改查操作题目4&#xff08;综合&#xff09;-图书管理系统题目1-将数组存放在集合中 现有如下字符串元素&#xff1a;[“aaa”, “…...

【Linux】冯诺依曼体系结构与操作系统概念理解

&#x1f451;作者主页&#xff1a;安 度 因 &#x1f3e0;学习社区&#xff1a;StackFrame &#x1f4d6;专栏链接&#xff1a;Linux 文章目录一、前言二、冯诺依曼体系结构1、体系简述2、内存的重要性3、硬件方案解释软件行为4、体系结构中的数据流动5、拓展三、操作系统简述…...

protegeproject/mapping-masterPublic

protegeproject/mapping-masterPublicWatch 10 Fork 7Fork your own copy of protegeproject/mapping-masterStar 44CodeIssues15Pull requests3ActionsProjectsWikiSecurityInsightsMappingMasterDSL编辑新页面马丁奥康纳编辑了此页面 on Oct 29, 2020 85 修订页面4家Mapping…...

大数据分析案例-基于随机森林算法构建人口普查分析模型

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…...

【数据结构和算法】认识线性表中的链表,并实现单向链表

本文接着上文&#xff0c;上文我们认识了线性表的概念&#xff0c;并实现了静态、动态顺序表。接下来我们认识一个新概念链表。并实现单向链表的各种操作。顺序表还有不明白的看这一篇文章 (13条消息) 【数据结构和算法】实现线性表中的静态、动态顺序表_小王学代码的博客-CSDN…...

2023-1-28

具有给定数值的最小字符串 题目描述 小写字符 的 数值 是它在字母表中的位置&#xff08;从 1 开始&#xff09;&#xff0c;因此 a 的数值为 1 &#xff0c;b 的数值为 2 &#xff0c;c 的数值为 3 &#xff0c;以此类推。 字符串由若干小写字符组成&#xff0c;字符串的数…...

Linux_常见命令

1.ls ls -l 列出隐藏文件&#xff0c;并显示10项权限,类似如同下图 在部分发行版本的linux下&#xff0c;ll等同于ls -l 首先&#xff0c;第一列为-则代表着这一列是文件&#xff0c; 第一列为d则代表这一列为目录 除了第一位&#xff0c;那么其他还有9位&#xff0c;分为3组…...

【Linux】基础IO --- 系统级文件接口、文件描述符表、文件控制块、fd分配规则、重定向…

能一个人走的路别抱有任何期待&#xff0c;死不了 文章目录一、关于文件的重新认识二、语言和系统级的文件操作&#xff08;语言和系统的联系&#xff09;1.C语言文件操作接口&#xff08;语言级别&#xff09;1.1 文件的打开方式1.2 文件操作的相关函数1.3 细节问题2.系统级文…...

ffmpeg无损裁剪、合并视频

我用的版本是 ffmpeg version git-2020-06-23-ce297b4 官方文档 https://ffmpeg.org/ffmpeg-utils.html#time-duration-syntax 时间格式 [-][HH:]MM:SS[.m...] 或 [-]S[.m...][s|ms|us]裁剪视频 假设需要裁剪视频aaa.mp4&#xff0c;第5秒到第15秒 ffmpeg -ss 5 -to 15 -i…...

ATAC-seq分析:Annotating Peaks(9)

1. 注释开放区域 将已识别的无核小体区域与基因组特征&#xff08;如基因和增强子&#xff09;相关联通常很有趣。 一旦注释到基因或增强子的基因&#xff0c;我们就可以开始将 ATACseq 数据与这些基因的特征相关联。 &#xff08;功能注释、表达变化、其他表观遗传状态&#x…...

springboot 载入自定义的yml文件转DTO

改进方法&#xff0c;直接spring注入 import cn.hutool.json.JSONUtil; import org.springframework.beans.factory.config.YamlMapFactoryBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import …...

使用Ownips工具获取海外电商网站wish商品价格

一、引言 在数字化浪潮汹涌的今天&#xff0c;互联网已经成为我们生活、工作中不可或缺的一部分。而在这个虚拟的世界里&#xff0c;每一个设备都需要一个独特的标识来确保信息的准确传递&#xff0c;这个标识就是IP地址。而在众多IP地址中&#xff0c;静态IP因其独特的稳定性…...

【1524】java投票管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 java 投票管理系统是一套完善的java web信息管理系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysql5.0&…...

一周销售增长26.7%!赛盈分销本期选品揭晓亚马逊大赚品类

甲辰龙年果然开了个好年&#xff0c;今年的跨境人有福了。 美国零售联合会预测2024年当地的经济发展将呈现积极走向&#xff0c;整体零售额将增长2.5%-3.5%&#xff0c;达到5.23-5.28万亿美元的市场规模。 且在4月初&#xff0c;调研机构Momentum Commerce公布了今年亚马逊春季…...

购物车实现

目录 1.购物车常见的实现方式 2.购物车数据结构介绍 3.实例分析 1.controller层 2.service层 1.购物车常见的实现方式 方式一&#xff1a;存储到数据库 性能存在瓶颈方式二&#xff1a;前端本地存储 localstorage在浏览器中存储 key/value 对&#xff0c;没有过期时间。s…...

Three.js——聚光灯、环境光、点光源、平行光、半球光

个人简介 &#x1f440;个人主页&#xff1a; 前端杂货铺 &#x1f64b;‍♂️学习方向&#xff1a; 主攻前端方向&#xff0c;正逐渐往全干发展 &#x1f4c3;个人状态&#xff1a; 研发工程师&#xff0c;现效力于中国工业软件事业 &#x1f680;人生格言&#xff1a; 积跬步…...