esperando la entrada del usuario en un hilo separado

Estoy tratando de lograr una manera de generar un hilo que espera la entrada del usuario; si no se ingresa una entrada en 10 segundos, quiero que la secuencia de comandos elimine el subproceso generado y continúe el procesamiento. Tengo una forma de recuperar la entrada del hilo si se ingresa texto, pero no tengo forma de dejar que el tiempo de espera acabe con el nuevo hilo generado.

En el siguiente ejemplo es lo más cerca que he venido. Le digo al subproceso recién creado que es un demonio y se cerrará cuando finalice el script principal. El problema que tengo con esto es que el hilo continuará esperando hasta que el script salga, o el usuario haya ingresado algo.

shared_var = ['1'] def run(ref): ref[0] = raw_input("enter something: ") print "shared var changed to '%s'" % (ref[0]) thread = threading.Thread(target=run, args=(shared_var,)) thread.daemon = True thread.start() time.sleep(10) # simplified timeout #Need some way to stop thread if no input has been entered print "shared var = " + shared_var[0] 

Sé que matar de forma repentina a un subproceso no es la mejor forma de hacerlo ( enlace relacionado ), pero no sé cómo interrumpir el nuevo subproceso que está esperando en el raw_input

Parece que no hay manera de tiempo de entrada del usuario. En el enlace que proporcionó SmartElectron, la solución no funciona ya que el temporizador se detiene una vez que se solicita el raw_input.

La mejor solución hasta ahora es:

 # Declare a mutable object so that it can be pass via reference user_input = [None] # spawn a new thread to wait for input def get_user_input(user_input_ref): user_input_ref[0] = raw_input("Give me some Information: ") mythread = threading.Thread(target=get_user_input, args=(user_input,)) mythread.daemon = True mythread.start() for increment in range(1, 10): time.sleep(1) if user_input[0] is not None: break 

En tu caso no te preocupes por cerrar el hilo abruptamente. En el enlace, diga

Generalmente es un mal patrón matar un hilo de forma abrupta, en python y en cualquier idioma. Piense en los siguientes casos:

  • el hilo contiene un recurso crítico que debe cerrarse correctamente.
  • el hilo ha creado varios otros hilos que también deben eliminarse.

Cierre la conexión de la base de datos, los archivos abiertos, etc. Los recursos que necesitan cerrarse correctamente, en este caso, cerrar el hilo adecuadamente es fundamental. En este caso su solución es válida. *

Si esta solución no satisface, puede usar Cómo establecer el límite de tiempo de entrada