一种小技巧,可以让python捕获信号量HUP 然后当使用 kill 发起HUP信号量的时候 捕获到进行处理,可以处理为重新读取配置文件并重新赋值,这样不需要重启服务也可以让程序重新读取配置文件的内容
捕获信号量
import signal
import ConfigParser
def get_config():
conf = ConfigParser.ConfigParser()
conf.read("config.cfg")
name = conf.get("test", "name")
print(name)
def update_config(signum,frame):
print("update config")
get_config()
def ctrl_c(signum,frame):
print("input ctrl c")
exit(1)
# 捕获HUP
signal.signal(signal.SIGHUP, update_config)
# 捕获ctrl+c
signal.signal(signal.SIGINT, ctrl_c)
print("test signal")
get_config()
while True:
pass
配置文件
$ cat config.cfg
[test]
# name = "Recar"
name = "@@@"
执行程序 python
修改配置文件 name为Recar
发起HUP信号
切到捕获的信号量看到重新更新了配置文件
这里我开始还有的 from config import name
然后捕获信号量再重新导入,也就是再执行一下 from config import name
这样是不行的,如果想要重新导入需要 reload(模块) 但是这里reload不支持 from的形式
我改为 import config
然后在 自定义的信号量处理函数中 reload(config)
来实现重新载入模块。
还是推荐使用 ConfigParser
来获取配置文件好一些。