Python 2.6.x theading / señales / atexit falla en algunas versiones?

He visto muchas preguntas relacionadas con esto ... pero mi códigotrabajos en python 2.6.2 yfalla para trabajar en python 2.6.5. ¿Me equivoco al pensar que todas las funciones de atexit "registradas a través de este módulo no se invocan cuando el programa es eliminado por una señal", la cosa no debería contar aquí porque estoy captando la señal y luego salgo limpiamente? ¿Que está pasando aqui? ¿Cuál es la forma correcta de hacer esto?

import atexit, sys, signal, time, threading

terminate = False
threads = []

def test_loop():
    while True:
        if terminate:
            print('stopping thread')
            break
        else:
            print('looping')
            time.sleep(1)

@atexit.register
def shutdown():
    global terminate
    print('shutdown detected')
    terminate = True
    for thread in threads:
        thread.join()

def close_handler(signum, frame):
    print('caught signal')
    sys.exit(0)

def run():
    global threads
    thread = threading.Thread(target=test_loop)
    thread.start()
    threads.append(thread)

    while True:
        time.sleep(2)
        print('main')

signal.signal(signal.SIGINT, close_handler)

if __name__ == "__main__":
    run()

Python 2.6.2:

$ python halp.py 
looping
looping
looping
main
looping
main
looping
looping
looping
main
looping
^Ccaught signal
shutdown detected
stopping thread

Python 2.6.5:

$ python halp.py 
looping
looping
looping
main
looping
looping
main
looping
looping
main
^Ccaught signal
looping
looping
looping
looping
...
looping
looping
Killed <- kill -9 process at this point

El hilo principal en 2.6.5 parece no ejecutar nunca las funciones atexit.

Respuestas a la pregunta(3)

Su respuesta a la pregunta