[python] signal handler schrijven

Pagina: 1
Acties:

  • Sir Isaac
  • Registratie: September 2002
  • Laatst online: 21-05-2025
Ik ben een xmlrpc server aan schrijven in python. Het ding moet onder linux draaien, dus heb ik er een nette daemon van gemaakt. Dat betekent dat hij met een signaal (SIGTERM) moet worden afgesloten.

Ik heb nu in de main functie van mijn programma de volgende signal handler geschreven die ik vervolgens koppel aan he SIGTERM signaal:
code:
1
2
3
4
5
if __name__ == "__main__"
    def SignalHandler(signal, frame):
        Server.Exit()

    signal.signal(signal.SIGTERM, SignalHandler)

De signal handler roept dus alleen de Exit method van een Server object aan. Ik vind dit eigenlijk niet zo elegant: de naam van het object is hard gecodeerd in de code van de Handler.
Als ik het SIGTERM signaal meteen aan de Exit methode koppel, lijkt het ook te werken. De koppeling maak ik in de __init__ methode.
code:
1
2
3
4
5
6
class Server:
    def __init__(self):
        signal.signal(signal.SIGTERM, self.Exit)

    def Exit(self, signal, frame):
        bla bla

Ik snap niet helemaal waarom dit kan. Een signal handler moet twee parameters hebben, het signaal en een stack frame. Als je van de handler een method maakt komt daar een derde parameter bij (self).
Daarnaast wodt de __init__ method voor iedere nieuwe instance van de Server klasse aangeroepen. Wordt de Exit functie dan automatisch voor alle Servers aangeroepen?
Ik hoop dat iemand hier zijn licht over kan laten schijnen.

[ Voor 8% gewijzigd door Sir Isaac op 23-12-2005 00:56 ]