- 博客(185)
- 收藏
- 关注
原创 物联网视频监控服务(一)-硬件选择篇
此为一个微型的计算机,运行linux系统,上面提供各种引脚,用来接入其他硬件,进行供电控制及数据交互;以4B版本的树莓派为例,其包括的硬件功能分布如下Grove系统引用简介:Grove是一个模块化的标准连接器原型系统。Grove采用积木式组装电子技术。与基于跳线或焊接的系统相比,连接,试验和构建更容易,并简化了学习系统;优点如下:不用再使用 焊枪进行电线焊接,改为基于拔插式;不用过于考虑 2个硬件间 的连错线问题,人家提供的每个硬件会告诉用户怎么接线;
2023-03-14 20:51:53 810 3
原创 物联网视频监控服务(二)-硬件编码篇
概述此篇文章主要描述 ESP32-CAM硬件上的软件开发部分;功能点采集视频数据,并通过UDP协议上传到服务器功能;接收emqx的topic消息,动态调整 视频帧 获取及发送频率;WIFI连接成功 通过闪光灯提示;通过watch dog 实现当程序宕机或假死自动重启;使用技术语言:python软件或框架:micropython+umqtt(MQTT协议的实现)IDE(代码编译器): Thonny+Pycharm应用层协议:MQTT传输层协议:TCP,UDP硬件:ESP32-C
2023-03-14 20:50:34 411
原创 Go 实现多态和 参数的动态个数及动态类型
go语言利用interface实现 python中的 函数或方法的 动态类型及动态传参个数; 及 鸭子类型
2023-03-09 19:23:33 1116 1
原创 opentelemetry+python+jaeger链路追踪相关使用备注
opentelemetry+python+jaeger链路追踪相关使用
2022-09-06 17:10:59 3588
原创 kong lua 调用插件报错:Resource temporarily unavailable
后端报错内容如下connect() to unix:/usr/local/kong/xxx.socket failed (11: Resource temporarily unavailable)前端报错返回 404错误问题原因unix的socket在大量请求进来时,其缓存队列较小导致 部分请求无法缓存,直接返回错误内容;解决思路修改 unix的socket缓存队列大小即可;解决方法kong.conf 配置文件的 ```lua_socket_pool_size``` 变量 值改
2022-04-20 14:37:28 325
原创 Python collections.deque使用
底层实现原理:A deque (double-ended queue) is represented internally as a doubly linked list. (Well, a list of arrays rather than objects, for greater efficiency.) Both ends are accessible, but even looking at the middle is slow, and adding to or removing from
2021-11-18 16:47:43 657
原创 WSGI和flask上下文机制
WSGI全称:Python Web Server Gateway Interface(python web服务网关接口)此WSGI接口 有2部分,分别为 server或者gateway端 和application或者framework端;http请求处理过程如下图:server端作用负责接收用户发起的http请求,进行简单处理后,将包装后的请求数据 调用一次application端的服务,处理具体的请求,处理完后再交给server端,封装后再交给用户;flask框架中server端的依赖继承关
2021-11-05 16:17:11 639
原创 Celery连接rabbitmq报Connection reset by peer
问题复现在使用celery + rabbitmq作为broker时,启动一定时间后 会 由于celery和rabbitmq的心跳检测机制 认为连接有问题,先报 如下错误Too many heartbeats missed再过一段时间,由于认为心跳有问题,会断开tcp连接,就会报 如下错误:ConnectionResetError: [Errno 104] Connection reset by peerproject_name | [2021-10-27 12:19:00,125:
2021-11-01 19:13:46 2468 1
原创 Mongo 持久化(durability)机制
Mongo的持久化过程先将内存中的多个写入命令(包括插入,修改操作) 达到一定的时间或空间后,写入到日志系统中的日志文件(硬盘)里, 然后日志文件中的内容 在达到一定时间后,同步到数据文件中,从而保证数据的持久性;也就是 一个插入操作,需要在内存中 同步到硬盘的日志文件中,再同步到数据文件中 共3个过程;其中可能存在的 丢失数据的情况 在 内存中的命令同步到日志文件的过程中; mongo默认每100毫秒或达到规定字节时 同步到日志文件, 也就是 顶多有100毫秒的数据会丢失;Mongo设
2021-10-09 18:09:02 1090
原创 Mongo explain()使用
explain作用在通过mongo语句进行查询时,如果查询速度过慢,可以用此方法 显示 mongo在查询过程中的查询计划,是否使用索引,以及 查询,并返回了多少行 等等信息 帮助开发人员 在进一步优化之前,提供准确的信息;explain方法参数verbosity参数,值如下queryPlanner 或 0 默认值; 返回值只返回queryPlanner和serverInfo executionStats 返回值返回 详细的执行状态相关信息,如 扫描了多少行,耗时多久等等; all...
2021-10-09 14:18:13 975
原创 迭代器模式(Iterator)及代码实现
模式定义:生活中的例子代码中的例子(何时该使用此模式):该模式关键的角色:该模式的主要优缺点如下:和 其他模式 的 比较:示例代码部分总结:相关链接:http://c.biancheng.net/view/1383.htmlhttps://refactoringguru.cn/design-patterns/chain-of-responsibility...
2021-08-26 14:31:08 325
原创 基金模拟系统中,账户模块对乐观锁悲观锁的详细设计方案
需求:在不考虑 被黑客篡改db数据的安全性问题下,现需要实时记录 用户 每笔交易变动后 账户金额的变化要求:并发时,不能出现 账户金额记录错误,如 账户金额100元,同时买入2笔订单,每笔20元,则账户金额必须为60元;需求分析: 解决并发情况下,db数据脏读脏写的问题详设方案:表结构设计方案:class AccountAmountModel(): """账户金额表""" __tablename__ = 't_account_amount' id = Colu
2021-08-24 18:28:03 180
原创 flask单个请求中计算密集型的优化过程
被请求接口中的情况如下: 根据用户输入参数, 需要使用pandas和numpy进行大量计算,这些计算中 ,比如 在 范围 1-100之间使用 随机函数 生成 一个随机值,这个随机值 就是一条线上的点; 这个接口 需要 随机100万次 然后把100万个点渲染到前端页面上;分析需求: 因为是随机100万次,每次随机值都放在list中,最后发给前端; 每次计算时 不会影响其他程序;优化思路:可以考虑 把100万次的计算 平均放到 10个进程中;每个进程负责10万次计算; 这样可以缩减10倍时间...
2021-08-11 16:55:18 422
原创 python heapq数据结构
python中堆的使用相关实现原理其实 堆 只是将list中的元素位置进行改变以满足堆的数据结构要求即可;并且每次 增删改 时 都会移动元素位置以保证 满足 堆 特性所以 堆的 数据结构仍然是 list而已;只是每次对 堆的操作 都需要将list作为参数 传入堆的函数中;堆的数据结构要求为: i处的元素总是大于位置i // 2处的元素;注意和下标无关如: 此堆结构: [1.11, 2, 1.5, 3, 8, 5, 4, 6, 7, 11, 9, 10] 则以 第i=6位的数...
2021-08-11 16:43:59 147
原创 Python代码编写优化
在导入方式及 代码运行访问 命名空间中的变量时,先在本地变量寻找 再到全局变量寻找的优化#! /usr/bin/env python# -*- coding: utf-8 -*-import mathimport timeitfrom math import sindef tight_loop_very_slow(iterations): """ 每次循环 要先找全局变量中的math模块,再去 模块中找 sin方法,极慢 """ result = 0...
2021-08-11 16:15:03 125
原创 linux 重启 python后台进程脚本
重启 python后台进程脚本echo "删除旧进程"old_ids=$(ps -ef | grep /home/work/venv/bin/python | grep -v grep | awk '{print $2}')echo $old_idskill $old_idsecho "删除成功"export OLY_CFG=/home/work/config/local_test.yamlecho "启动新进程"nohup /home/work/venv/bin/python /ho.
2021-08-11 15:43:56 961
原创 Spark RDD中依赖关系与阶段划分
依赖关系含义:spark中RDD之间,先执行的叫父RDD,后执行的叫子RDD;那么 父RDD分区中元素流向子分区RDD的方式叫做依赖关系,一般有2种,如下窄依赖: 父RDD每个分区的元素只能只能流向子RDD某一个分区;而 子RDD某个分区元素可以来自多个父RDD分区; 如 map,filter等宽依赖:父RDD每个分区的元素可以流向子RDD多个分区;判断依赖关系方法当某个RDD出现shuffle(洗牌)操作时,基本都是宽依赖;如 groupByKey reduceByKey sortB
2021-08-11 15:33:05 426
原创 PySpark groupBy groupByKey用法
用法groupBy: 每个元素根据用户指定的函数运行结果作为key,然后进行分组;如果需要 自定义分组的key可以使用此方法;groupByKey:rdd每个元素根据第一个值作为key进行分组用法示例# -*- coding: utf-8 -*-"""(C) rgcAll rights reservedcreate time '2021/5/30 21:01'Usage:"""# 构建sparkfrom pyspark.conf import SparkConffrom
2021-08-11 15:32:07 4363
原创 PySpark reduce reduceByKey用法
用法reduce:对rdd内部 元素 进行迭代操作reduce方法 分区内和分区间调用相同的用户给定的函数;先在每个分区内执行完用户给定的函数后,将每个分区的结果通过collect()方法统计到Driver端;然后在Driver端 通过用户给定的函数进行分区间操作;其实:reduce方法调用的元素间的迭代操作就是用的 python自带的 functools reduce方法reduceByKey:先根据key对每个分区内的数据进行分组,然后调用用户指定的函数对每个key的values进行
2021-08-11 15:31:10 5427
原创 使用sed修改docker-compose中docker版本号
# 修改 版本名称# -i:源文件修改# s:替换# 此命令含义为 替换 busy_service/project_name:xxxx 为新版本号- sed -i 's/busy_service\/project_name:[0-9a-z]*/busy_service\/project_name:${INNER_TAG_NAME}/' docker-compose.yml...
2021-08-11 15:30:03 1253
原创 Spark RDD cache persist checkpoint用法及区别
用法cachepersistcheckpoint特点cachepersistcheckpoint区别cachepersistcheckpoint
2021-08-11 15:24:47 384
原创 sqlalchemy 2013 Lost connection to MySQL server 解决方法
报错如下:2013, 'Lost connection to MySQL server during query ([Errno 104] Connection reset by peer)解决方法:sqlalchemy配置中添加如下:# 回收连接app.config["SQLALCHEMY_POOL_RECYCLE"] = 1800# 每次执行sql前 悲观检查db是否可用;虽然资源稍微额外的消耗,但是简单可靠app.config["SQLALCHEMY_ENGINE_OP
2021-08-11 15:22:35 4488
原创 PySpark 累加器使用及自定义累加器
累加器(accumulator)功能实现在Driver端和Executor端共享变量 写的功能实现机制Driver端定义的变量,在Executor端的每个Task都会得到这个变量的副本;在每个Task对自己内部的变量副本值更新完成后,传回给Driver端,然后将每个变量副本的值进行累计操作;触发/生效 时机受惰性求值机制的影响,只有在行动算子执行时 累加器才起作用;使用地方最好只在行动算子中使用,不要在转换算子中使用,因为转换算子可能出现失败时会重试,这时对应的累加器的值也会
2021-06-17 21:28:20 2015 2
原创 PySpark map mapValues用法
用法map: 对rdd每个元素(包括key,value) 进行 数据转换操作,rdd的元素个数不能改变mapValues:对rdd每个元素的values进行 数据转换操作,rdd的元素个数不能改变;其实 每个元素 格式大致为: RDD( (‘key1’,[val1,val2]),(‘key2’,[val11,val21]) );而 mapValues就是 通过一个函数对 每个元素的values作为参数传给函数;如 sum([val1,val2]);所以 mapValues是对每个元素的valu
2021-05-30 20:59:44 4996
原创 PySpark fold foldByKey用法
用法当RDD分区内和分区间算法不同时,使用aggregate aggregateByKey等2个方法;但是当分区内和分区间算法相同时,便可以简化使用fold foldByKey这2个方法;使用示例# -*- coding: utf-8 -*-"""(C) rgcAll rights reservedcreate time '2021/5/26 19:37'Usage:fold 用法foldByKey 用法"""# 构建sparkfrom pyspark.conf import
2021-05-30 17:33:18 395
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人