现状

因为Python没有像 SpringBoot 那样成熟的框架体系。 也没现成的 动态参数启动之类的。
(也许有,但我不知道。)

目的:

希望可以通过配置文件,统一管理封装,比如数据库账号密码,测试环境。等等。
而改了之后呢,又不想重启服务。

解决方案

可以让python捕获信号量HUP 然后当使用kill 发起HUP信号量的时候 捕获到进行处理,可以处理为重新读取配置文件并重新赋值,这样不需要重启服务也可以让程序重新读取配置文件的内容。

推荐使用 ConfigParser 来获取配置文件好一些。

Linux几种中断信号区别

Linux的HUP,INT,KILL,TERM,TSTP中断信号区别为:键入不同、对应操作不同、启用不同

键入不同

  1. HUP中断信号:HUP中断信号是当用户键入<Ctrl+X>时由终端驱动程序发送的信号。

  2. INT中断信号:INT中断信号是当用户键入<Ctrl+I>时由终端驱动程序发送的信号。

  3. KILL中断信号:KILL中断信号是当用户键入<Ctrl+Z>时由终端驱动程序发送的信号。

  4. TERM中断信号:TERM中断信号是当用户键入<Ctrl+ >时由终端驱动程序发送的信号。

  5. TSTP中断信号:TSTP中断信号是当用户键入<Ctrl+T>时由终端驱动程序发送的信号

对应操作不同

  1. HUP中断信号:HUP中断信号的对应操作为让进程挂起,睡眠。

  2. INT中断信号:INT中断信号的对应操作为正常关闭所有进程。

  3. KILL中断信号:KILL中断信号的对应操作为强制关闭所有进程。

  4. TERM中断信号:TERM中断信号的对应操作为正常的退出进程。

  5. TSTP中断信号:TSTP中断信号的对应操作为暂时停用进程。

启用不同

  1. HUP中断信号:HUP中断信号发送后,可以重新被用户再次输入恢复启用进程。

  2. INT中断信号:INT中断信号发送后,不可以重新被用户再次输入恢复启用进程。

  3. KILL中断信号:KILL中断信号发送后,不可以重新被用户再次输入恢复启用进程。

  4. TERM中断信号:TERM中断信号发送后,可以重新被用户再次输入启用进程。

  5. TSTP中断信号:TSTP中断信号发送后,可以重新被用户再次输入继续使用进程。

HUP–解释.

  • 一个进程不用重新启动就能重新读取它的配置文件并调整自给以适应变化的话,那么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

发起HUP信号

ps -ef  | grep config_test.py

ps -aux | grep config_test

切到捕获的信号量看到重新更新了配置文件