fix(framework): SysomFramework should kill all child while receive killed signal

This commit is contained in:
SunnyQjm 2024-01-04 20:51:45 +08:00
parent 29ddb40c01
commit ff7af9c80e
3 changed files with 26 additions and 2 deletions

View File

@ -38,4 +38,5 @@ uvicorn[standard]==0.16.0
# xlrd==2.0.1 # xlrd==2.0.1
# prometheus-client==0.16.0 # prometheus-client==0.16.0
pyyaml==6.0 pyyaml==6.0
pyyaml-include==1.3 pyyaml-include==1.3
psutil==5.9.7

View File

@ -24,7 +24,8 @@ setuptools.setup(
"aiofiles==0.8.0", "aiofiles==0.8.0",
"anyio>=3.6.2", "anyio>=3.6.2",
"asyncer==0.0.2", "asyncer==0.0.2",
"fastapi==0.83.0" "fastapi==0.83.0",
"psutil==5.9.7"
], ],
classifiers=[ classifiers=[
"Programming Language :: Python :: 3", "Programming Language :: Python :: 3",

View File

@ -43,8 +43,30 @@ class SysomFramework:
cls._config = config cls._config = config
cls._framework_plug_mag = FrameworkPlugMag(config) cls._framework_plug_mag = FrameworkPlugMag(config)
cls.init_logger(config) cls.init_logger(config)
cls.catch_kill_sig_then_kill_all_child()
return cls return cls
@classmethod
def catch_kill_sig_then_kill_all_child(cls):
"""Catch kill signal and kill all child process
"""
def signal_handler(signum, frame):
parent = psutil.Process(pid)
for child in parent.children(recursive=True): # 获取所有子进程
child.kill() # 结束子进程
exit(1)
import signal
import os
import psutil
pid = os.getpid()
signal.signal(signal.SIGINT, signal_handler)
signal.signal(signal.SIGTERM, signal_handler)
signal.signal(signal.SIGHUP, signal_handler)
signal.signal(signal.SIGQUIT, signal_handler)
signal.signal(signal.SIGABRT, signal_handler)
@classmethod @classmethod
def init_logger(cls, config: ConfigParser): def init_logger(cls, config: ConfigParser):
"""Init clogger """Init clogger