Ciao,
se c'è qualche esperto di Python in lista, vorrei sottoporgli un problema che sto analizzando.
Ho un servizio che gira in un Docker container all'interno di un cluster ed ho la necessità di poterlo stoppare con un SIGTERM.
Per questo motivo ho un modulo che intercetta il segnale e solleva un eccezione, che poi gestisco per far uscire il servizio in maniera corretta.
Ecco qui il codice semplificato del mio modulo:
def handler(signum, frame):
LOG.info(f"Catched signal {signum} - {signal.Signals(signum).name}")
if signum == signla.SIGTERM:
LOG.info(f"Raise KeyboardInterrupt as received {signal.Signals(signum).name}")
raise KeyboardInterrupt('Received SIGTERM')
def init():
signal.signal(signal.SIGTERM, handler)
Poi nel file principale:
if __name__ == "__main__":
LOG.info("Starting ...")
signal_handler.init()
try:
main(sys.argv[1:])
except KeyboardInterrupt:
sys.exit(0)
finally:
sys.exit(2)
Ora, nella fase di build del servizio, abbiamo un analizzatore statico del codice, che mi segnala un problema grave sulla seguente riga:
signal.signal(signal.SIGTERM, handler)
Sostiene che c'è un problema: "Information Leakage-Signal (Python)"
Ed in particolare, la riga è "Suspicious capturing of signal events [signal.signal]"
Ho fatto un po' di ricerche, ma non sono riuscito a trovare granché per migliorare questo codice e risolvere il problema segnalato.
Chiedo a chi è più esperto di me in Python, se ho dimenticato qualche best practice o anche un riferimento di documentazione utile a risolvere questo problema.
Vi ringrazio per l'aiuto,
Mario