码迷,mamicode.com
首页 > 编程语言 > 详细

Python 配置文件加载且自动更新(watchdog)

时间:2017-09-01 21:17:40      阅读:830      评论:0      收藏:0      [点我收藏+]

标签:ret   port   obj   def   system   env   igp   pat   cti   

安装依赖: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)

标签:ret   port   obj   def   system   env   igp   pat   cti   

原文地址:http://www.cnblogs.com/stones/p/7464923.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!