时间:2021-05-22
配置文件热更新是服务器程序的一个基本功能,通过热更新可以不停机调整程序的配置,特别是在生产环境可以提供极大的便利,比如发现log打得太多了可以动态调高日志等级,业务逻辑参数变化,甚至某个功能模块的开关等都可以动态调整。
package main import ( "encoding/json" "fmt" "io/ioutil" "log" "os" "os/signal" "sync" "syscall" ) //用json配置测试 type Config struct { Test1 string `json:"Test1:` Test2 int `json:"Test1:` } var ( config *Config configLock = new(sync.RWMutex) ) func loadConfig() bool { f, err := ioutil.ReadFile("config.json") if err != nil { fmt.Println("load config error: ", err) return false } //不同的配置规则,解析复杂度不同 temp := new(Config) err = json.Unmarshal(f, &config) if err != nil { fmt.Println("Para config failed: ", err) return false } configLock.Lock() config = temp configLock.Unlock() return true } func GetConfig() *Config { configLock.RLock() defer configLock.RUnlock() return config } func init() { if !loadConfig() { os.Exit(1) } //热更新配置可能有多种触发方式,这里使用系统信号量sigusr1实现 s := make(chan os.Signal, 1) signal.Notify(s, syscall.SIGUSR1) go func() { for { <-s log.Println("Reloaded config:", loadConfig()) } }() } func main() { select {} }以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
一、信号量(Semaphore)信号量(Semaphore)是由内核对象维护的int变量,当信号量为0时,在信号量上等待的线程会堵塞,信号量大于0时,就解除堵塞
Semaphore是一个计数信号量,它的本质是一个共享锁。信号量维护了一个信号量许可集。线程可以通过调用acquire()来获取信号量的许可;当信号量中有可用的
互斥锁和信号量都是操作系统中为并发编程设计基本概念,互斥锁和信号量的概念上的不同在于,对于同一个资源,互斥锁只有0和1的概念,而信号量不止于此。也就是说,信号量
前言最近在学习python,发现了解线程信号量的基础知识,对深入理解python的线程会大有帮助。所以本文将给大家介绍Python3.X线程中信号量的使用方法,
信号量、同步这些名词在进程间通信时就已经说过,在这里它们的意思是相同的,只不过是同步的对象不同而已。但是下面介绍的信号量的接口是用于线程的信号量,注意不要跟用于