¿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.