MyEMS开源能源管理系统核心代码解读004
本期解读:
计量表能耗数据规范化算法:myems/myems-normalization/meter.py
代码见底部
这段代码是一个用于计算和存储能源计量数据(如电表读数)的小时值的Python脚本。它主要包含两个函数:calculate_hourly 和 worker。下面是对这两个函数的详细解释:
calculate_hourly 函数
这个函数负责周期性地从数据库中查询所有电表及其相关的能源值点,并使用多进程方式并行处理每个电表的数据。
连接数据库:首先尝试连接到系统数据库(cnx_system_db),如果连接失败,则记录错误并等待一段时间后重试。
查询电表信息:从系统数据库中查询所有电表及其关联的能源值点信息,并将结果存储在 meter_list 中。
随机化处理顺序:为了避免每次都按照相同的顺序处理电表,使用 random.shuffle 打乱 meter_list。
多进程处理:创建一个进程池(Pool),将 meter_list 中的每个电表作为参数传递给 worker 函数进行处理。处理完成后,收集并处理任何错误信息。
休眠与重试:处理完所有电表后,程序休眠一段时间(例如60秒),然后重新开始新一轮的处理。
worker 函数
这个函数负责处理单个电表的数据,计算其每小时的能源值,并将结果存储到数据库中。
确定时间范围:计算需要处理的时间范围,即从上一次计算结束的时间到当前时间。
获取原始数据:从历史数据库中获取指定时间范围内的原始能源值数据。
数据规范化:根据配置的时间间隔(config.minutes_to_count),将原始数据规范化为每小时的能源值。
插入数据库:将规范化后的每小时能源值插入到能源数据库中。
错误处理:在整个过程中,如果遇到任何错误,将记录错误信息并返回。
总结
这段代码是一个自动化的能源数据处理脚本,它定期从数据库中获取电表的原始读数,计算每小时的能源消耗,并将结果存储回数据库。它使用了多进程来提高处理效率,并且包含了错误处理机制以确保稳定运行。
如想了解更多,随时欢迎打扰。
MyEMS开源能源管理系统核心代码解读004的更多相关文章
- 优秀开源代码解读之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 ...
随机推荐
- 【uni-app】在windows10系统中HBuliderX用iPhone苹果手机进行调试运行详细说明
测试准备: 1)iphone13 ios18.4.1 和一根可以读取数据的苹果线 2)HBuliderX打开uni-app项目文件(项目图标是正方形内一个U) 3)windows10系统 测试目标 ...
- 计算机图形学——Games101深度解析_第一章
写在前面 关于Games101深度解析参考了很多佬的文章,并且加上了自己的理解.主要感觉games101课程里面还有很多由于时间原因都没讲的很详细,略过了很多,所以我对于课程中困难的知识点进行了更多的 ...
- IntelliJ IDEA 源文件提示 cannot resolve method 或者 Cannot find declaration to go to
问题描述:IntelliJ IDEA 在源文件中提示 Cannot resolve method,但是项目可以正常编译运行,提示异常的类明明存在且没有任何异常.尝试使用ctrl+鼠标左键进入该类时,提 ...
- The length of parametric curve (x + sin x, cos x)
问题引入 一个硬币(圆)的周长上有一个点,将硬币在一条线上无滑动地滚动.假设那个点开始时在最上面,滚了半圈到了最下面,求这个点相对于地面的运动轨迹的长度. 或者说,再简单点,自行车总骑过吧.假如你在骑 ...
- 红色教育软件需求分析 NABCD
N(need) 红色教育指在以红色作为时代精神内涵的象征.务实的落点在于教育.要呼唤有志青年忧国忧民.挑战自我.超越自我.挑战极限.奉献社会的崇高精神.而我们大学生作为实现中华民族伟大复兴的有生力量, ...
- SwanLab入门深度学习:Qwen3大模型指令微调
一.概述 Qwen3是通义千问团队的开源大语言模型,由阿里云通义实验室研发.以Qwen2作为基座大模型,通过指令微调的方式实现高准确率的文本分类,是学习大语言模型微调的入门任务. 指令微调是一种通过在 ...
- 一则复杂 SQL 改写后有感
抱歉很久没写技术博客. 自从LLM爆发之后,写概念堆叠的所谓"博客"已经没有意义了,那么我会思考我的博客还有什么作用. 得出的结论是:具体业务的讨论仍然是有价值的 所以之后会随缘更 ...
- 能看病的AI你见过吗:ChatMoney
本文由 ChatMoney团队出品 在当今这个科技飞速发展的时代,人工智能技术正在以惊人的速度改变着我们的生活,人工智能已经深入到各个领域,医疗行业也不例外. 而今天我要和大家聊一聊利用ChatMon ...
- kards卡组推荐——苏美隐蔽
声明:此卡组抗快能力极差,害怕炮兵和小飞机为中后期 隐蔽核心思路: 在第一回合,尽量找杜斯团,找不到如果对方有单位,可以打一个镰刀 第二回合,①有杜斯团:打出隐蔽单位,按隐蔽顺序(附1)出,如果只有1 ...
- X6在数栈指标管理中的应用
一.需求背景 产品成立之初,产品的需求是需要对各种指标进行公式运算,组合成一个新的复合指标,供后续使用.当时产品提出的形式是有两种: 一种是直接让用户输入,不作任何其他操作,但这种方式带来的问题一 ...