【做一下1】python 监听数据库变化

本文介绍了一种使用YoloV5进行多路监控的应用实践,并探讨了如何通过Python监听数据库变化来动态更新监控源,包括轮询数据库及利用MySQL触发器生成日志文件的方法。

前言

用的yolov5,作者自己写的loadStream函数就是依据 streams.txt里面的rtsp流地址列表来新建线程,然后实现多路监控的。

在这里插入图片描述
大体就是这个图里面说的,我已经是为了个整体业务,去小改了这个loadStreams方法,将那些可用的rtsp流地址保存到一个新的list里面,然后再新建线程。

如何检验可用与否,就是用opencv VideoCapture.isOpened() 慢慢去试,连不上就剔除

上面这个流程,是蠢(还想着定时任务,隔一会重启一下服务器,其实就是潜意识里,想用最直接(不动脑子)的方法糊弄这个问题)。跟老师一说,老师也是说,还是改成触发器吧。拖了十天了,今天趁着还没有干别的事情,脑子还能转起来,来学一下。

技能要求

监听数据库,然后 读写最新数据库信息到文件,然后利用文件重新启动服务器。

准备工作

  1. pycharm新建一个python文件
  2. nacicat 打开自己的数据库
  3. 找一篇 python监听数据库表变化的博客

再去找博客的时候,(我其实之前是找了一些了的),但大多都是对数据库进行轮询,也就是和我上面的定时任务差不多了。可我想要的是触发器,只有当数据库改变的时候,才会执行,这样才叫触发嘛,一直盯着,那叫监控。

然后就看到了这条
在这里插入图片描述
确实,那思路就从监听数据库 转变为 用mysql的触发器然后生成的日志文件(只生成rtsp地址那一列变动的日志),然后再用python的watchdog(这个是轮子Python 监控文件增加、修改、删除等变化)监听这个日志文件。 这样就不用监听数据库了,变成了监听文件。(主要是同事的数据库连起来很慢,所以能不监听就不监听。)
另外一个想法,想着能不能通过mysql的触发器,直接调用python服务重启的脚本。这就牵扯到,这个脚本是不是也要放到同事数据库所在的那台机子上。如果是我这个想法的话,那我上面需要监听的那个日志文件,肯定也是在数据库的本机地址上生成的呀,可是我的服务器是部署在autodl的docker里面的,这两个又要怎么互通呢?
好麻烦,要不就 轮询数据库得了。

后期要是这个东西真的要上线的话,那数据库肯定也是在服务器上的吧。mysql部署在docker那就是说日志文件和我项目的代码是在一个地方的。
如果是一个地方的话,那自己访问自己肯定很快的呀,轮询是可以的;或者然后设定触发器,监控触发器生成的文件也是可以的;或者触发器触发然后调用python重启脚本也是可以的。

那暂时不知道未来是什么情况,就把上述可行的路子都看一下。

轮询

写脚本 轮询 写的挺好,罗列了两种需要监听的类型——新增和改变
我业务里面也主要就是处理新增的那些数据,如何将它们加入到streams.txt,所以我就可以在轮询的回调方法那里写“将数据写入streams.txt的文件操作”。
我把他这个代码排版好了之后,就是如下:

import os
import sys
import time
import threading
import pickle
import pymysql


class BaseListener(object):
    # 使用一个线程启动监听
    def __init__(self):
        self.checkpoint = 0
        self.stop_flag = True
        self.listen_thread = threading.Thread(name="Listener", target=self.do_listen)
        self.listen_thread.start()

    def start(self):
        self.stop_flag = False


    def stop(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值