Consider the following program (underscores are used to force indentation): ------------------------------------------------ import atexit, threading, time
def atExitFunc(): ____print 'atExitFunc called.' atexit.register(atExitFunc) class T(threading.Thread): ____def run(self): ________assert not self.isDaemon() ________print 'T before sleep.' ________time.sleep(1.0) ________print 'T after sleep.' T().start() print 'Main thread finished.' ------------------------------------------------ I would expect the program to print 'atExitFunc called.' after 'T after sleep.', but instead, it prints (on Windows XP with Python 2.3.5 or 2.4.2): ------------------------------------------------ T before sleep. Main thread finished. atExitFunc called. T after sleep. ------------------------------------------------ atExitFunc is called when the main thread terminates, rather than when the process exits. The atexit documentation contains several warnings, but nothing about this. Is this a bug? -- http://mail.python.org/mailman/listinfo/python-list