当前位置: 首页 > news >正文

python watchdog 配置文件热更新

目录

一、Watchdog示例

二、aiohttp服务配置热更新


         在同事的golang代码中学习到了config.json热更新的功能,这里自己也学习了一下python写web服务的时候怎么来实现配置的热更新。主要是利用Watchdog这个第三方python库,来监控文件系统的改变,从而实现不用重启代码热更新的功能。

一、Watchdog示例

from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandlerclass HotUpdateEventHandler(FileSystemEventHandler):def on_created(self, event):if event.is_directory:returnprint(f'File created: {event.src_path}')def on_modified(self, event):if event.is_directory:returnprint(f'File modified: {event.src_path}')if __name__ == "__main":path = "/root"  # 检测根目录下文件和目录的改变# 处理器event_handler = HotUpdateEventHandler()# 监控器observer = Observer()observer.schedule(event_handler, path, recursive=False)observer.start()try:while True:# 其他的功能逻辑do_something()except KeyboardInterrupt:observer.stop()observer.join()

流程:

1、定义事件处理器(文件的修改、删除等对应逻辑)

2、定义监控器

3、监控器中执行调度,传入事件处理器、监控路径和是否递归监控

重要的两个class

watchdog.observers.Obsever

watchdog.events.FileSystemEventHandler

Obsever发起监控线程,FileSystemEventHandler实现具体的文件系统变化的逻辑

在实现具体的功能的时候,需要自己重写FileSystemEventHandler中的方法

主要常用的就是以上的方法

其中event具有的属性如下

二、aiohttp服务配置热更新

import json
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
import aiohttp
from aiohttp import web
import os
config_path = "./test.json"
config = json.load(open(config_path))def reload_config():"""热重载配置"""global configtry:new_config = json.load(open(config_path))print('Config reloaded successfully.')config = new_configexcept Exception as e:print(f'Failed to reload config: {e}')class ConfigReloadEventHandler(FileSystemEventHandler):def on_modified(self, event):if event.src_path == config_path:print(f"Config file modified: {event.src_path}. Reloading...")reload_config()async def post(request:web.Request):req = await request.json()send_data = configreturn web.json_response(send_data)async def main():app = web.Application()app.add_routes([web.post('/nlp', post)])return app# 使用方法
if __name__ == "__main__":config_event_handler = ConfigReloadEventHandler()path, filename = os.path.split(config_path)observer = Observer()observer.schedule(config_event_handler,path,recursive=False)observer.start()try:local_ip = "0.0.0.0"port = "6666"web.run_app(main(), port=port)except KeyboardInterrupt:observer.stop()observer.join()

使用aiohttp启动一个web 服务,同时热更新test.json配置文件,作为全局变量config在web服务中使用

test.json内容

{"name":"huangyang"}

请求结果

修改test.json文件内容

{"name":"huangyang_new"}

再次请求结果为

服务端日志

参考文章

watchdog 2.1.5 documentation

解密Python Watchdog:实时监控文件系统的终极解决方案

相关文章:

  • BP神经网络的反向传播(Back Propagation)
  • 方法区讲解
  • EasyExcel 导出批注信息
  • 【Go】十四、图形验证码、短信验证码、注册接口与redis的简单使用
  • 单片机练习题3
  • 每日优秀影视分享❗❗
  • WPF文本绑定显示格式StringFormat设置-特殊格式时间日期和多数据绑定
  • 原生dom操作快速写入html渲染(insertAdjacentHTML)
  • Cadence:Conformal系列形式验证工具
  • 深入解析Netty的Reactor模型及其实现:详解与代码示例
  • Pikachu靶场--XSS
  • excel数据透视
  • Ubuntu常见命令解释
  • 修改主频睡眠模式停止模式待机模式
  • 第五章重采样方法
  • Angular2开发踩坑系列-生产环境编译
  • classpath对获取配置文件的影响
  • css布局,左右固定中间自适应实现
  • Idea+maven+scala构建包并在spark on yarn 运行
  • Java 最常见的 200+ 面试题:面试必备
  • JavaScript 奇技淫巧
  • javascript 总结(常用工具类的封装)
  • Kibana配置logstash,报表一体化
  • LeetCode算法系列_0891_子序列宽度之和
  • MYSQL如何对数据进行自动化升级--以如果某数据表存在并且某字段不存在时则执行更新操作为例...
  • Nodejs和JavaWeb协助开发
  • react-core-image-upload 一款轻量级图片上传裁剪插件
  • Redis中的lru算法实现
  • Windows Containers 大冒险: 容器网络
  • 基于MaxCompute打造轻盈的人人车移动端数据平台
  • 如何在GitHub上创建个人博客
  • 我感觉这是史上最牛的防sql注入方法类
  • SAP CRM里Lead通过工作流自动创建Opportunity的原理讲解 ...
  • 阿里云API、SDK和CLI应用实践方案
  • 阿里云重庆大学大数据训练营落地分享
  • 长三角G60科创走廊智能驾驶产业联盟揭牌成立,近80家企业助力智能驾驶行业发展 ...
  • ​Kaggle X光肺炎检测比赛第二名方案解析 | CVPR 2020 Workshop
  • #ifdef 的技巧用法
  • #大学#套接字
  • #免费 苹果M系芯片Macbook电脑MacOS使用Bash脚本写入(读写)NTFS硬盘教程
  • #数学建模# 线性规划问题的Matlab求解
  • $L^p$ 调和函数恒为零
  • (175)FPGA门控时钟技术
  • (M)unity2D敌人的创建、人物属性设置,遇敌掉血
  • (react踩过的坑)Antd Select(设置了labelInValue)在FormItem中initialValue的问题
  • (二)WCF的Binding模型
  • (二)斐波那契Fabonacci函数
  • (二)延时任务篇——通过redis的key监听,实现延迟任务实战
  • (仿QQ聊天消息列表加载)wp7 listbox 列表项逐一加载的一种实现方式,以及加入渐显动画...
  • (附源码)基于ssm的模具配件账单管理系统 毕业设计 081848
  • (附源码)计算机毕业设计SSM智能化管理的仓库管理
  • (三)docker:Dockerfile构建容器运行jar包
  • (五)IO流之ByteArrayInput/OutputStream
  • (游戏设计草稿) 《外卖员模拟器》 (3D 科幻 角色扮演 开放世界 AI VR)
  • ***linux下安装xampp,XAMPP目录结构(阿里云安装xampp)