安装依赖:pip install watchdog

#!/usr/bin/env python3
# -*- coding: utf-8 -*- import logging
import os
import threading
from configparser import ConfigParser, NoOptionError
from watchdog.events import FileSystemEventHandler
from watchdog.observers import Observer lock = threading.Lock() class ConfigFileModifyHandler(FileSystemEventHandler):
def on_modified(self, event):
if os.path.relpath(event.src_path) == 'app.config':
Config.get_instance().load_config() class Config(object):
__instance = None def __init__(self, config_file_path=None):
logging.debug('配置初始化')
self.config = ConfigParser()
self.config_file_path = config_file_path or os.path.join(os.path.dirname(__file__), '../app.config')
self.load_config()
self._init_config_file_observer() def _init_config_file_observer(self):
logging.debug('配置文件监控')
event_handler = ConfigFileModifyHandler()
observer = Observer()
observer.schedule(event_handler, path=os.path.dirname(self.config_file_path), recursive=False)
observer.setDaemon(True)
observer.start() @staticmethod
def get_instance():
if Config.__instance:
return Config.__instance
try:
lock.acquire()
if not Config.__instance:
Config.__instance = Config()
finally:
lock.release()
return Config.__instance def load_config(self):
logging.debug('加载配置')
self.config.read(self.config_file_path, 'utf-8') def get(self, key, default=None):
"""
获取配置
:param str key: 格式 [section].[key] 如:app.name
:param Any default: 默认值
:return:
"""
map_key = key.split('.')
if len(map_key) < 2:
return default
section = map_key[0]
if not self.config.has_section(section):
return default
option = '.'.join(map_key[1:])
try:
return self.config.get(section, option)
except NoOptionError:
return default def get(key, default=None):
"""
获取配置
:param str key: 格式 [section].[key] 如:app.name
:param Any default: 默认值
:return:
"""
return Config.get_instance().get(key, default)

Python 配置文件加载且自动更新(watchdog)的更多相关文章

  1. asp.netcore 深入了解配置文件加载过程

    前言     配置文件中程序运行中,担当着不可或缺的角色:通常情况下,使用 visual studio 进行创建项目过程中,项目配置文件会自动生成在项目根目录下,如 appsettings.json, ...

  2. .net core 深入了解配置文件加载过程

    前言     配置文件中程序运行中,担当着不可或缺的角色:通常情况下,使用 visual studio 进行创建项目过程中,项目配置文件会自动生成在项目根目录下,如 appsettings.json, ...

  3. Spring Boot 2.4.0正式发布,全新的配置文件加载机制(不向下兼容)

    千里之行,始于足下.关注公众号[BAT的乌托邦],有Spring技术栈.MyBatis.JVM.中间件等小而美的原创专栏供以免费学习.分享.成长,拒绝浅尝辄止.本文已被 https://www.you ...

  4. bash 的配置文件加载顺序

    bash配置文件的加载顺序和登陆方式有关,下面先介绍下登陆方式. 1 登陆方式有2种 登陆式SHELL: su - oracle    su -l oracle 正常从终端登陆 非登录式SHELL: ...

  5. Heka 的配置文件加载逻辑

    Heka 使用的是 TOML 格式的配置文件, 有关 golang 加载 TOML 配置文件的技术请参看:  http://www.cnblogs.com/ghj1976/p/4082323.html ...

  6. python 模块加载

    python 模块加载 本文主要介绍python模块加载的过程. module的组成 所有的module都是由对象和对象之间的关系组成. type和object python中所有的东西都是对象,分为 ...

  7. Spring使用环境变量控制配置文件加载

    项目中需要用到很多配置文件,不同环境的配置文件是不一样的,因此如果只用一个配置文件,势必会造成配置文件混乱,这里提供一种利用环境变量控制配置文件加载的方法,如下: 一.配置环境变量 如果是window ...

  8. [Eclipse] - 集成JBoss7热加载和自动发布

    使用Eclipse + JBoss开发时,总是要重启项目或JBoss,烦人.下面方法可以很简单的实现Eclipse + JBoss热加载和自动发布. 我的环境是JBoss 7.1.1 Final 1) ...

  9. Pace.js – 超赞的页面加载进度自动指示和 Ajax 导航效果

    在页面中引入 Pace.js  和您所选择主题的 CSS 文件,就可以让你的页面拥有漂亮的加载进度和 Ajax 导航效果.不需要挂接到任何代码,自动检测进展.您可以选择颜色和多种效果,有简约,闪光灯, ...

随机推荐

  1. Foreman-porxy负载均衡搭建

    本文接上篇puppet负载均衡的环境实验. Foreman-proxy可以采用四层或者七层负载,都可以实现,在foreman的web界面添加一个smart-proxy,后端多个真实foreman-pr ...

  2. [MySQL]关于Com_状态

    MySQL 5.5官方文档: http://dev.mysql.com/doc/refman/5.5/en/server-status-variables.html#statvar_Com_xxx C ...

  3. 集群重启某一主机下所有osd down解决办法

    标签(空格分隔): ceph 运维 osd 问题描述: 掉电后,上电发现cluster中的主机node3下的所有osd都down掉了,通过命令重启node3的ceph-osd服务,osd依然无法up: ...

  4. 四种生成和解析XML文档的方法介绍

    解析XML的方法越来越多,但主流的方法也就四种,即:DOM.SAX.JDOM和DOM4J 1.DOM(Document Object Model) DOM是用与平台和语言无关的方式表示XML文档的官方 ...

  5. windows10 启用Linux子系统

    转载 https://jingyan.baidu.com/article/e2284b2b99a327e2e6118d38.html 打开Windows下 设置--更新和安全--针对开发人员--选中“ ...

  6. Entity Framework Code-First(9.11):DataAnnotations - InverseProperty Attribute

    DataAnnotations - InverseProperty Attribute: We have seen in the Code-First Convention section that ...

  7. 1.如何绕过WAF(Web应用防火墙)

    一:大小写转换法: 看字面就知道是什么意思了,就是把大写的小写,小写的大写.比如: SQL:sEleCt vERsIoN(); ‍‍XSS:)</script> 出现原因:在waf里,使用 ...

  8. 理解setTimeout和setInterval

    setTimeout和setInterval,这两个js函数都是用来定时执行.setTimeout执行一次,setInterval执行多次. 问题出现在今天,使用setInterval是,设置执行速度 ...

  9. hdu1076

    #include<iostream> using namespace std; int main() { int cases; int k; cin>>cases; while ...

  10. HDU - 5542 The Battle of Chibi(LIS+树状数组优化)

    The Battle of Chibi Cao Cao made up a big army and was going to invade the whole South China. Yu Zho ...