¿Cómo mantener eficientemente una tecla en Pygame?

[EDITAR] He publicado la solución allí abajo. [/EDITAR]

He encontrado dos preguntas relacionadas:

La tecla Hold de Pygame mantiene un bucle infinitopygame - al mantener presionado el botón

Pero quiero ser específico. ¿Cómo?

while not done:
    for e in event.get():
        if e.type == KEYDOWN:
            keys = key.get_pressed()
            if e.type == QUIT or keys[K_ESCAPE]:
                done = True
            if keys[K_DOWN]:
                print "DOWN"

Cuando presiono la flecha hacia abajo, se imprime, pero se imprime solo una vez. Si quiero imprimirlo otra vez, necesito presionarlo nuevamente.

Si uso la palabra clave while en su lugar,

while keys[K_DOWN]:
    print "DOWN"

Tengo un bucle infinito por alguna oscura razón.

Esta alternativa lógica también es inútil:

if ((e.type == KEYDOWN) and keys[K_DOWN]):
    print "DOWN"

Y existe este otro que de alguna manera limpia los eventos y puede usar mientras:

while not done:
    for e in event.get():
        if e.type == KEYDOWN:
            keys = key.get_pressed()
            if e.type == QUIT or keys[K_ESCAPE]:
                done = True
            while keys[K_DOWN]:
                print "DOWN"
                event.get()
                keys = key.get_pressed()

Pero presiona la tecla hacia abajo durante menos de un segundo y se imprime miles de veces. (Mover a un jugador sería imposible, y ajustar el reloj para esto no parece ser la forma correcta de lidiar con eso (y lo he intentado y he fallado miserablemente)).

Presionar y ejecutar el bloque miles de veces es inútil. Lo que quiero es presionar la tecla y continuar con la acción mientras no la libero, dentro de la velocidad de reloj definida del juego.

Respuestas a la pregunta(7)

Su respuesta a la pregunta