Bucle de fondo de Python mientras se ejecutan otros comandos

Estoy trabajando en un minijuego de irl en el que obtienes materiales cada 5 minutos. Para monitorear esto quería escribir un script de python simple. Pero ahora hay un pequeño roadblok,

¿Cómo se crea un bucle que hace algo cada x minutos, mientras se siguen ejecutando otras entradas del teclado sin interrumpir el bucle?

Tal vez un temporizador será útil para su tarea. Le recomiendo que consulte este enlace: https://docs.python.org/2.4/lib/timer-objects.html . Mientras el temporizador está contando, puede hacer otras tareas y cuando se acaba el tiempo, puede adjuntar una función al temporizador para hacer algo. Los temporizadores de esta biblioteca se heredan de los subprocesos.

Aquí hay un ejemplo bastante simple de usar un threading.Timer . Muestra la hora actual cada 5 segundos mientras responde a la entrada del usuario.

Este código se ejecutará en cualquier terminal que admita secuencias de escape de control de terminal ANSI / VT100.

#!/usr/bin/env python3 ''' Scrolling Timer Use a threading Timer loop to display the current time while processing user input See https://stackoverflow.com/q/45130837/4014959 Written by PM 2Ring 2017.07.18 ''' import readline from time import ctime from threading import Timer # Some ANSI/VT100 Terminal Control Escape Sequences CSI = '\x1b[' CLEAR = CSI + '2J' CLEAR_LINE = CSI + '2K' SAVE_CURSOR = CSI + 's' UNSAVE_CURSOR = CSI + 'u' GOTO_LINE = CSI + '%d;0H' def emit(*args): print(*args, sep='', end='', flush=True) # Show the current time in the top line using a Timer thread loop def show_time(interval): global timer emit(SAVE_CURSOR, GOTO_LINE % 1, CLEAR_LINE, ctime(), UNSAVE_CURSOR) timer = Timer(interval, show_time, (interval,)) timer.start() # Set up scrolling, leaving the top line fixed emit(CLEAR, CSI + '2;r', GOTO_LINE % 2) # Start the timer loop show_time(interval=5) try: while True: # Get user input and print it in upper case print(input('> ').upper()) except KeyboardInterrupt: timer.cancel() # Cancel scrolling emit('\n', SAVE_CURSOR, CSI + '0;0r', UNSAVE_CURSOR) 

Debe enviar un KeyboardInterrupt , es decir, presionar Ctrl C para detener este progtwig,