¿Excepción de Python en el subproceso Thread-1 (probablemente generado durante el cierre del intérprete)?

Mi amigo y yo hemos estado trabajando en un gran proyecto para aprender y divertirnos en Python y PyGame. Básicamente es una simulación de la IA de un pequeño pueblo. queríamos un ciclo día / noche, por lo que encontré una buena forma de cambiar el color de una superficie completa usando numpy (específicamente el tutorial de cross fade) -http://www.pygame.org/docs/tut/surfarray/SurfarrayIntro.html

Lo implementé en el código y FUNCIONA, pero es extremadamente lento, como <1 fps lento. así que busco en hilos (porque quería agregarlo eventualmente) y encontré esta página en Colas -Aprendiendo sobre el módulo Queue en python (cómo ejecutarlo)

Paso unos 15 minutos haciendo un sistema básico, pero tan pronto como lo ejecuto, la ventana se cierra y dice:

Exception in thread Thread-1 (most likely raised during interpreter shutdown):

EDIT: esto es literalmente todo lo que dice, no hay error de Rastreo

No sé qué estoy haciendo mal, pero supongo que me estoy perdiendo algo simple. Agregué las partes necesarias del código a continuación.

q_in = Queue.Queue(maxsize=0)

q_out = Queue.Queue(maxsize=0)

def run():    #Here is where the main stuff happens
    #There is more here I am just showing the essential parts
    while True:
        a = abs(abs(world.degree-180)-180)/400.

        #Process world
        world.process(time_passed_seconds)

        blank_surface = pygame.Surface(SCREEN_SIZE)
        world.render(blank_surface)    #The world class renders everything onto a blank surface
        q_in.put((blank_surface, a))
        screen.blit(q_out.get(), (0,0))

def DayNight():
    while True:
        blank_surface, a = q_in.get()
        imgarray = surfarray.array3d(blank_surface)  # Here is where the new numpy       stuff starts (AKA Day/Night cycle)
        src = N.array(imgarray)
        dest = N.zeros(imgarray.shape)
        dest[:] = 20, 30, 120
        diff = (dest - src) * a
        xfade = src + diff.astype(N.int)

        surfarray.blit_array(blank_surface, xfade)
        q_out.put(blank_surface)
        q_in.task_done()

def main():
    MainT = threading.Thread(target=run)
    MainT.daemon = True
    MainT.start()

    DN = threading.Thread(target=DayNight)
    DN.daemon = True
    DN.start()

    q_in.join()
    q_out.join()

Si alguien pudiera ayudar sería muy apreciado. Gracias.

Respuestas a la pregunta(1)

Su respuesta a la pregunta