因为Python没有像 SpringBoot 那样成熟的框架体系。 也没现成的 动态参数启动之类的。
(也许有,但我不知道。)
目的:
希望可以通过配置文件,统一管理封装,比如数据库账号密码,测试环境。等等。
而改了之后呢,又不想重启服务。
可以让python捕获
信号量HUP
然后当使用kill 发起HUP信号量的时候
捕获到进行处理,可以处理为重新读取配置文件并重新赋值
,这样不需要重启服务也可以让程序重新读取配置文件的内容。
推荐使用 ConfigParser
来获取配置文件好一些。
Linux的HUP,INT,KILL,TERM
,TSTP中断信号区别为:键入不同、对应操作不同、启用不同
。
HUP中断信号:HUP中断信号是当用户键入<Ctrl+X>时由终端驱动程序发送的信号。
INT中断信号:INT中断信号是当用户键入<Ctrl+I>时由终端驱动程序发送的信号。
KILL中断信号:KILL中断信号是当用户键入<Ctrl+Z>时由终端驱动程序发送的信号。
TERM中断信号:TERM中断信号是当用户键入<Ctrl+ >时由终端驱动程序发送的信号。
TSTP中断信号:TSTP中断信号是当用户键入<Ctrl+T>时由终端驱动程序发送的信号
HUP中断信号:HUP中断信号的对应操作为让进程挂起,睡眠。
INT中断信号:INT中断信号的对应操作为正常关闭所有进程。
KILL中断信号:KILL中断信号的对应操作为强制关闭所有进程。
TERM中断信号:TERM中断信号的对应操作为正常的退出进程。
TSTP中断信号:TSTP中断信号的对应操作为暂时停用进程。
HUP中断信号:HUP中断信号发送后,可以重新被用户再次输入恢复启用进程。
INT中断信号:INT中断信号发送后,不可以重新被用户再次输入恢复启用进程。
KILL中断信号:KILL中断信号发送后,不可以重新被用户再次输入恢复启用进程。
TERM中断信号:TERM中断信号发送后,可以重新被用户再次输入启用进程。
TSTP中断信号:TSTP中断信号发送后,可以重新被用户再次输入继续使用进程。
一个进程不用重新启动就能重新读取它的配置文件
并调整自给以适应变化的话,那么HUP通常来触发这种行为
.#!/usr/bin/env python3
# -*-coding:utf-8 -*
"""
-------------------------------------------------
# @File :config_test
# @Date :2021/12/3 18:06
# @Author :Jack
# @Email :itdocs@163.com
# @Source:
# @Desc:
-------------------------------------------------
"""
import signal
import configparser
def get_config():
conf = configparser.ConfigParser()
conf.read('./db.conf')
dev = conf.get("Section_Dev", "env")
port = conf.get("Section_Dev", "port")
print(dev)
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()
print("----")
while True:
# get_config()
# print("test ---")
# time.sleep(10)
pass
db.conf
[Section_Dev]
host='127.0.0.1'
port=8000
env=dev
python config_test.py
env=pro
port=8888
ps -ef | grep config_test.py
ps -aux | grep config_test
切到捕获的信号量看到重新更新了配置文件