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:实时监控文件系统的终极解决方案

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/32225.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

学习使用venv创建“python虚拟环境”

前言 使用python开发会经常面临的问题是:你会需要不同版本的python,而且就算同一个版本的python,不同的项目有很大可能会需要不同版本的包。而 “Python虚拟环境” 就是为了解决这个问题的。 目标 结合官方文档,自己动手实践来…

开启声音的奇幻之旅:AI声音变换器的魔法秘籍与创意应用

AI视频生成:小说文案智能分镜智能识别角色和场景批量Ai绘图自动配音添加音乐一键合成视频https://aitools.jurilu.com/这个充满科技魔力的时代,AI Voice Changer 就像一把神奇的钥匙,能为我们打开声音的魔法之门。今天,就让我带你…

JetBrains PyCharm 2024 mac/win版编程艺术,智慧新篇

JetBrains PyCharm 2024是一款功能强大的Python集成开发环境(IDE),专为提升开发者的编程效率和体验而设计。这款IDE不仅继承了前代版本的优秀特性,还在多个方面进行了创新和改进,为Python开发者带来了全新的工作体验。 JetBrains PyCharm 20…

腰背肌筋膜炎怎么治疗最有效

腰背肌筋膜炎的治疗方法主要包括以下几种: 1、休息和物理治疗: 确保充足的休息,避免过度劳累,减少腰背部肌肉的负担。 物理治疗,如热敷或冷敷,可以缓解疼痛和肌肉紧张。热敷可以使用热水袋、热毛巾或电热垫…

linux普通: rocketmq的安装测试与可视化界面安装,git的 (linux) 安装

全文目录,一步到位 1.前言简介1.1 专栏传送门(rabbitmq) 2. rocketmq使用及安装2.0 开放端口2.1 rocketmq版本说明2.2 具体操作2.2.1 修改文件2.2.2 具体启动指令ps: 查看日志 2.3.3 jps查看java进程2.3.4 测试运行情况> 步骤一: 临时指定nameserver注册中心位置> 步骤二…

【机器学习】基于Softmax松弛技术的离散数据采样

1.引言 1.1.离散数据采样的意义 离散数据采样在深度学习中起着至关重要的作用,它直接影响到模型的性能、泛化能力、训练效率、鲁棒性和解释性。 首先,采样方法能够有效地平衡数据集中不同类别的样本数量,使得模型在训练时能够更均衡地学习…

实用软件下载:会声会影2023最新安装包及详细安装教程

可以说它不仅符合家庭或个人所需的影片剪辑功能,甚至能够挑战专业级的影片剪辑软件,适合一般大众使用,操作简单易懂,界面简洁明快。从总体上来看影片制作向导模式,只要三个步骤就可快速做出DV影片,入门初学…

乌班图Ubuntu 24.04 SSH Server 修改默认端口重启无效

试用最新的乌班图版本,常规修改ssh端口,修改完毕后重启sshd提示没有找到service,然后尝试去掉d重启ssh后查看状态,端口仍然是默认的22,各种尝试都试了不行,重启服务器后倒是端口修改成功了,心想…

推出一系列GaN功率放大器: QPA2211、QPA2211D、QPA2212、QPA2212D、QPA2212T,支持卫星通信和5G基础设施。

推出用于支持支持卫星通信和5G基础设施的GaN功率放大器: QPA2211 QPA2211D QPA2212 QPA2212D QPA2212T QPA2211 10W GaN功率放大器是一款Ka波段功率放大器,采用0.15m碳化硅基氮化镓工艺 (QGaN15) 制造而成。该放大器的工作频率范围为27.5GHz至31GHz&…

【JUC并发编程】

Java并发常见面试题总结(上) 线程 什么是线程和进程? 何为进程? 进程是程序的一次执行过程,是系统运行程序的基本单位,因此进程是动态的。系统运行一个程序即是一个进程从创建,运行到消亡的过程。 在 Java 中&am…

基于SpringBoot+Vue教材订购系统设计和实现(源码+LW+调试文档+讲解等)

💗博主介绍:✌全网粉丝10W,CSDN作者、博客专家、全栈领域优质创作者,博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌💗 🌟文末获取源码数据库🌟 感兴趣的可以先收藏起来,…

文件上传漏洞-下篇

一、白名单绕过 目录路径检测绕过 00截断 简介: 0x00是字符串的结束标识符,攻击者可以利用手动添加字符串标识符的方式来将后面的内容进行截断,而后面的内容又可以帮助我们绕过检测。 饶过条件 利用操作:Pass-12 要求&#xff…

高考志愿填报,二个准备三个重点四个原则

对于高考生而言,高考完毕并不是可以轻松地开始,接下来需要研究怎么报考的问题。如何在理想和现实中取得平衡?如何根据就业和专业的前景做合适的安排,对于还处于青少年阶段的高考生们来说不是容易的事情,要掌握哪些技巧…

CANoe CAPL如何模拟发送CAN错误帧?

目录 canOutputErrorFrame介绍代码output(errorframe)代码总结canOutputErrorFrame 介绍 代码 canOutputErrorFrame(errorFrame, 12, 0); //output Error Frame with 12 dominant bits on CAN1 canOutputErrorFrame(CAN2.errorFrame, 6,

快手可灵大模型开放视频续写功能,可生成最长约3分钟视频

6月21日,可灵再度进化,正式推出图生视频功能,支持用任意静态图像生成5s视频,并且可搭配不同的文本内容,实现丰富的视觉叙事 。 同时,可灵还发布了业内领先的视频续写功能,可为已生成的视频&…

Chromium 开发指南2024 Mac篇-开始编译Chromium(五)

1.引言 在之前的指南中,我们已经详细介绍了在 macOS 上编译和开发 Chromium 的准备工作。您学会了如何安装和配置 Xcode,如何下载和配置 depot_tools,以及如何获取 Chromium 的源代码。通过这些步骤,您的开发环境已经搭建完毕&am…

如何级联移位寄存器(74HC595)

在这个项目中,我们将使用 74HC595 移位寄存器将 2 个移位寄存器级联在一起。这样级联移位寄存器现在可以控制 16 个输出。 当然您可以级联任意数量的移位寄存器。如果您要级联第三个移位寄存器,它可以控制 24 个输出。如果您级联第四个移位寄存器&#x…

任务3.8.4 利用RDD实现分组排行榜

文章目录 1. 任务说明2. 解决思路3. 准备成绩文件4. 采用交互式实现5. 采用Spark项目实战概述:使用Spark RDD实现分组排行榜任务背景任务目标技术选型实现步骤1. 准备数据2. 数据上传至HDFS3. 启动Spark Shell4. 读取数据生成RDD5. 数据处理6. 计算TopN7. 输出结果8…

学习es6

1、let变量 2、const常量 3、解构赋值 4、模板字符串 5、简化对象写法 6、参数默认值 7、rest参数 8、扩展运算符 9、扩展对象方法 10、扩展数组方法 11、Set 12,Promise 13、Module模块

Leetcode - 周赛402

目录 一,3185. 构成整天的下标对数目 II 二,3186. 施咒的最大总伤害 三,3187. 数组中的峰值 一,3185. 构成整天的下标对数目 II 这里的T1,T2是一个题,这里直接一起讲了, 当我们已知 x%24 的值…