watchdog介绍

watchdog

问题

最近面临一个问题是其他业务提交模型文件,服务Flask接口需要实时的更新到该新的模型文件。有一些常规的解决办法,比如更新git项目,打tag,jenkins自动重新拉取并build。这种可能需要业务方懂得Git的使用且需要给予他比较高的开发权限,操作不当可能引起线上事故,这里用另外的方式去解决。监控文件是否发生改变,如果发生改变就进行相应的步骤操作。虽然Flask中有Werkzeug内置的stat重载器,但是其缺点是耗电较严重且准确性一般。因此可以使用其他的监测包。这里使用Python库watchdog,安装之后就能使用它自动监测文件的变动。watchdog 是一个实时监控库,其原理是通过操作系统的时间触发,需要循环等待。

安装

pip install watchdog

也可以通过源码安装,可以参考项目文档

例子

下面的示例程序将 递归(recursive=True) 地监视文件系统更改的工作目录,并将它们简单地记录到控制台:

import sys
import logging
from watchdog.observers import Observer
from watchdog.events import LoggingEventHandler

if __name__ == "__main__":
    logging.basicConfig(level=logging.INFO,
                        format='%(asctime)s - %(message)s',
                        datefmt='%Y-%m-%d %H:%M:%S')
    path = sys.argv[1] if len(sys.argv) > 1 else '.' # 监控文件夹或者文件
    event_handler = LoggingEventHandler()
    observer = Observer()  # 创建一个观察者对象
    observer.schedule(event_handler, path, recursive=True)  # 声明一个定时任务
    observer.start()  # 启动定时任务
    try:
        while observer.isAlive():
            observer.join(1)
    finally:
        observer.stop()
        observer.join()

Control+C 停止监控

假设上面程序文件是watch.py, 想要监控文件或者文件夹都可以,后续接文件名或者文件夹名

执行:

python watch.py hello

然后对hello文件夹中的hello.py进行更改,在该页面就能收到对应的提示信息:

2022-11-09 23:48:08 - Created file: hello/.hello.py.swp
2022-11-09 23:48:08 - Modified directory: hello
2022-11-09 23:48:08 - Created file: hello/.hello.py.swx
2022-11-09 23:48:08 - Modified directory: hello
2022-11-09 23:48:08 - Modified directory: hello
2022-11-09 23:48:08 - Deleted file: hello/.hello.py.swx
2022-11-09 23:48:08 - Modified directory: hello
2022-11-09 23:48:08 - Modified directory: hello
2022-11-09 23:48:08 - Deleted file: hello/.hello.py.swp
2022-11-09 23:48:08 - Modified directory: hello
2022-11-09 23:48:08 - Created file: hello/.hello.py.swp
2022-11-09 23:48:08 - Modified directory: hello
2022-11-09 23:48:08 - Modified file: hello/.hello.py.swp
2022-11-09 23:48:10 - Modified file: hello/.hello.py.swp
2022-11-09 23:48:11 - Created file: hello/4913
2022-11-09 23:48:11 - Modified directory: hello
2022-11-09 23:48:11 - Modified file: hello/4913
2022-11-09 23:48:11 - Modified directory: hello
2022-11-09 23:48:11 - Deleted file: hello/4913
2022-11-09 23:48:11 - Modified directory: hello
2022-11-09 23:48:11 - Moved file: from hello/hello.py to hello/hello.py~
2022-11-09 23:48:11 - Modified directory: hello
2022-11-09 23:48:11 - Created file: hello/hello.py
2022-11-09 23:48:11 - Modified directory: hello
2022-11-09 23:48:11 - Modified file: hello/hello.py
2022-11-09 23:48:11 - Modified directory: hello
2022-11-09 23:48:11 - Modified file: hello/hello.py
2022-11-09 23:48:11 - Modified file: hello/.hello.py.swp
2022-11-09 23:48:11 - Deleted file: hello/hello.py~
2022-11-09 23:48:11 - Modified directory: hello
2022-11-09 23:48:11 - Modified directory: hello
2022-11-09 23:48:11 - Deleted file: hello/.hello.py.swp
2022-11-09 23:48:11 - Modified directory: hello

说明进行了相应的修改,基于此信息可以做后续的逻辑操作等。总的来说,这个库还是比较方便的,不用自己去写shell脚本去定时监控文件是否发生了改变。

参考

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
S3C2440是一款嵌入式处理器,它的GPIO、UART和Watchdog是它的三个重要外设。下面我来分别介绍一下: 1. GPIO GPIO是General Purpose Input/Output的缩写,即通用输入输出端口。S3C2440共有7组GPIO,每组可以控制多个IO口。通过编程设置,可以将GPIO口设置为输入或输出,并且可以设置GPIO口的电平状态。GPIO口可以用于与外部设备进行数据交互,比如连接LED、按钮、LCD等。 使用方法: a. 选择要使用的GPIO口,将其配置为输入或输出。 b. 如果是输出,可以设置GPIO口的电平状态,使其输出高电平或低电平。 c. 如果是输入,可以读取GPIO口的电平状态,获取外部设备的状态信息。 2. UART UART是Universal Asynchronous Receiver/Transmitter的缩写,即通用异步收发器。S3C2440共有3个UART,用于串口通信。UART可以将数据从一个设备传输到另一个设备,数据传输方式为异步传输,即不需要时钟信号进行同步。 使用方法: a. 配置UART的波特率、数据位、停止位等参数。 b. 设置UART的发送和接收缓冲区。 c. 发送数据时,将数据写入发送缓冲区,等待发送完成。 d. 接收数据时,等待数据到达接收缓冲区,读取数据并处理。 3. Watchdog Watchdog是一种硬件定时器,用于检测系统是否正常运行。S3C2440的Watchdog可以被程序写入一个计数值,当计数器到达设定值时,Watchdog会自动重启系统。如果系统出现异常情况导致程序死循环或死机,Watchdog会在设定的时间内自动重启系统。 使用方法: a. 配置Watchdog的计数值和定时器参数。 b. 启动Watchdog,使其开始计时。 c. 定期喂狗,即在程序中定时重置Watchdog的计数器,防止Watchdog超时导致系统重启。 需要注意的是,Watchdog不能随意重置,否则可能会导致系统不稳定。重置Watchdog的时间间隔应该小于Watchdog的计时时间,通常为1/3或1/2。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

uncle_ll

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值