MyEMS开源能源管理系统核心代码解读009
本期解读:
虚拟点计算方法:myems/myems-normalization/virtualpoint.py
这段代码是一个用于计算和更新虚拟点(virtual points)值的Python脚本。虚拟点是指那些不直接对应于物理传感器读数的数据点,而是通过计算或转换其他数据点得到的。这个脚本的核心功能包括从数据库查询虚拟点信息、并行处理每个虚拟点的计算,并将计算结果保存回数据库。下面是对代码的详细解析:
概要
1.连接数据库:脚本首先尝试连接到系统数据库(cnx_system_db),以获取虚拟点的列表。
2.查询虚拟点:从系统数据库中查询所有标记为虚拟的点(is_virtual = 1)。
3.多进程处理:使用Python的multiprocessing库创建进程池,以并行方式处理每个虚拟点的计算。
4.虚拟点计算:对于每个虚拟点,脚本执行以下步骤:
- 连接到历史数据库(cnx_historical_db)。
- 获取虚拟点的起始和结束时间。
- 解析虚拟点的表达式和替换规则。
- 从系统数据库查询相关点的类型。
- 从历史数据库查询相关点的值。
- 使用SymPy库计算虚拟点的值。
- 将计算结果保存回历史数据库。
详细解析
1.数据库连接与错误处理:脚本使用mysql.connector连接MySQL数据库,并在连接失败时进行重试。
2.查询虚拟点:通过SQL查询获取所有虚拟点的信息,包括ID、名称、数据源ID、对象类型、高低限和地址。
3.多进程并行计算:
- 使用Pool创建进程池,并行调用worker函数处理每个虚拟点。
- worker函数负责单个虚拟点的计算逻辑。
4.虚拟点计算流程: - 步骤1:确定计算的起始和结束时间。
- 步骤2:解析虚拟点的表达式和替换规则。
- 步骤3:查询相关点的类型。
- 步骤4:查询相关点在指定时间范围内的值。
- 步骤5:使用SymPy计算表达式的值。
5.结果保存:将计算得到的虚拟点值保存回历史数据库,并更新最新值表。
代码特点
- 健壮性:脚本包含错误处理和数据库重连机制,确保稳定运行。
- 效率:通过多进程并行处理提高计算效率。
- 灵活性:支持通过配置文件(config模块)调整数据库连接和其他参数。
- 可扩展性:代码结构清晰,易于扩展和维护。
注意事项
- 数据库配置:需要正确配置数据库连接信息。
- 依赖库:脚本依赖于mysql.connector和sympy等Python库。
- 并发控制:在高并发环境下,需要注意数据库的连接数和性能问题。
- 错误处理:脚本中的错误处理主要用于日志记录和重试机制,实际应用中可能需要更详细的异常处理策略。
MyEMS开源能源管理系统核心代码解读009的更多相关文章
- 优秀开源代码解读之JS与iOS Native Code互调的优雅实现方案
简介 本篇为大家介绍一个优秀的开源小项目:WebViewJavascriptBridge. 它优雅地实现了在使用UIWebView时JS与ios 的ObjC nativecode之间的互调,支持消息发 ...
- Hybrid----优秀开源代码解读之JS与iOS Native Code互调的优雅实现方案-备
本篇为大家介绍一个优秀的开源小项目:WebViewJavascriptBridge. 它优雅地实现了在使用UIWebView时JS与ios 的ObjC nativecode之间的互调,支持消息发送.接 ...
- itest 开源测试管理项目中封装的下拉列表小组件:实现下拉列表使用者前后端0行代码
导读: 主要从4个方面来阐述,1:背景:2:思路:3:代码实现:4:使用 一:封装背景 像easy ui 之类的纯前端组件,也有下拉列表组件,但是使用的时候,每个下拉列表,要配一个URL ...
- 腾讯开源的 Paxos库 PhxPaxos 代码解读---Accept阶段(一)
腾讯开源的 Paxos库 PhxPaxos 代码解读---Accept阶段(一) 在看Accept阶段代码之前, 我们再回想一下 Basic Paxos算法; 1. Basic Paxos 算法是为 ...
- Android MVP模式 谷歌官方代码解读
Google官方MVP Sample代码解读 关于Android程序的构架, 当前(2016.10)最流行的模式即为MVP模式, Google官方提供了Sample代码来展示这种模式的用法. Repo ...
- msysGit管理GitHub代码
msysGit管理GitHub代码 代码的管理,在日常开发中是很重要的环节,程序员的修炼三部曲——版本控制,单元测试,项目自动化. 本篇就简单的说说通过msysGit来管理GitHub中的代码,实 ...
- C/C++ 开源库及示例代码
C/C++ 开源库及示例代码 Table of Contents 说明 1 综合性的库 2 数据结构 & 算法 2.1 容器 2.1.1 标准容器 2.1.2 Lockfree 的容器 2.1 ...
- Google免费的SVN服务器管理VS2010代码
原文:Google免费的SVN服务器管理VS2010代码 前言 Google免费为我们提供了代码管理的SVN服务器.首先我这里用的Win7 64的电脑系统,用VS2010进行的代码开发.这里管理代码需 ...
- spring JdbcTemplate 在itest 开源测试管理项目中的浅层(5个使用场景)封装
导读: 主要从4个方面来阐述,1:背景:2:思路:3:代码实现:4:使用 一:封装背景, 在做项目的时候,用的JPA ,有些复杂查询,比如报表用原生的JdbcTemplate ,很不方便;传参也不方便 ...
- weex官方demo weex-hackernews代码解读(上)
一.介绍 weex 是阿里出品的一个类似RN的框架,可以使用前端技术来开发移动应用,实现一份代码支持H5,IOS和Android.最新版本的weex已默认将vue.js作为前端框架,而weex-hac ...
随机推荐
- 代码随想录第四天 | 链表part02
两两交换链表中的节点 用虚拟头结点,这样会方便很多. 本题链表操作就比较复杂了,建议大家先看视频,视频里我讲解了注意事项,为什么需要temp保存临时节点. 题目链接/文章讲解/视频讲解: https: ...
- CF1988D The Omnipotent Monster Killer
CF1988D The Omnipotent Monster Killer 本文同步于我的网站. Problem 怪物们在一棵有 \(n\) 个顶点的树上,编号为 \(i(1\le i\le n)\) ...
- Client-go的四种客户端的简单使用
Client-go的四种客户端使用 我们知道kubectl是通过命令行交互的方式与Kubernetes API Server进行交互的,Kubernetes还提供了通过编程的方式与Kubernetes ...
- 2025H&NCTF-Misc&取证&OSINT全解
2025H&NCTF-Misc&取证&OSINT全解 Misc 签到&签退 公众号发送信息获取flag 问卷 回答问卷得flag 芙宁娜的图片 随波逐流扫一下图片,在R ...
- tcpdump工具使用
一.简单介绍 tcpdump命令是一款sniffer工具,它可以打印所有经过网络接口的数据包的头信息,也可以使用-w选项将数据包保存到文件中,方便以后分析. 二.使用语法 语法: tcpdump (选 ...
- Java实现密码、文件MD5加密,密码sha256、sha384、sha512Hex等加密
SHA512加密(参考:https://blog.csdn.net/zdj_Develop/article/details/89326621?utm_medium=distribute.pc_rele ...
- ArkUI-X应用工程结构说明
简介 本文档配套ArkUI-X,将OpenHarmony ArkUI开发框架扩展到不同的OS平台,比如Android和iOS平台,让开发者基于ArkUI,可复用大部分的应用代码(UI以及主要应用逻辑) ...
- HyperWorks的RT功能及使用技巧
在Altair(HyperWorks)里,当结构中包含 T 型.X 型或更复杂的连接特征(图 2-12 所示)时,此功能非常有效.不适用于没有 T 型连接的特征(图 2-12 右侧). 图 2-12 ...
- 盘古信息领航PCB产业变革:以PCB行业解决方案筑基数字化工厂
一.PCB 产业的数字化突围之战 在 5G 通信.人工智能与高端制造深度融合的当下,PCB 作为 "电子信息产业之基" 正面临双重变革压力:一方面,高端电子设备对高精密电路板的需求 ...
- 安全可控·国产典范—上海卓岚ZLAN5107-C全国产化 串口服务器助力工业通信自主化
一.为什么选择纯国产化串口服务器? 在当前国际形势下,关键基础设施的通信安全至关重要.工业通信设备的供应链安全与数据主权问题日益凸显.传统串口服务器依赖国外芯片(如ARM架构)和操作系统(如linxu ...