Bloody signal handling (in embedded Python code)

Marcin Krol mrkafk at gmail.com
Wed Jul 2 12:46:23 EDT 2008


Right, I didn't realize before that Python interpreter has its own 
signal handling routines.

Now I am able to handle signals in Python code, but it still barfs on exit:

import time
import signal
import sys

def userBreak(sigNum, execFrame):
         print "Interrupted,,,"
         sys.exit(sigNum)

def terminateRun(sigNum, execFrame):
         print "SIGTERM received, terminating."
         sys.exit(sigNum)

def test():
         time.sleep(1)
         print "success"
         time.sleep(90)

if __name__ == "__main__":
         signal.signal(signal.SIGTERM, terminateRun)
         signal.signal(signal.SIGINT, userBreak)
         test()




The error:

./test
success
    ( pressing Ctrl-C )
Interrupted,,,
Exception exceptions.SystemExit: 2 in 'garbage collection' ignored
Fatal Python error: unexpected exception during garbage collection
Aborted


So the real question is - how to exit cleanly from embedded Python code?





More information about the Python-list mailing list