2016-11-15 5 views

Répondre

0

Essayez l'exemple suivant (créer un fichier qui contient le code follwing et l'exécuter avec python commande):

from functools import wraps 
import errno 
import os 
import signal 


class TimeoutError(Exception): 
    pass 


def timeout(seconds=10, error_message=os.strerror(errno.ETIME)): 
    def decorator(func): 
     def _handle_timeout(signum, frame): 
      raise TimeoutError(error_message) 

     def wrapper(*args, **kwargs): 
      signal.signal(signal.SIGALRM, _handle_timeout) 
      signal.alarm(seconds) 
      try: 
       result = func(*args, **kwargs) 
      finally: 
       signal.alarm(0) 
      return result 

     return wraps(func)(wrapper) 

    return decorator 


@timeout(60) 
def print_something(): 
    return raw_input('Enter something: \n') 


if __name__ == "__main__": 
    data = "" 
    while data != "stop loop": 
     try: 
      data = print_something() 
     except TimeoutError: 
      continue 

Ma réponse est basée sur la réponse acceptée pour cette question SO Timeout function if it takes too long to finish

+0

Je suis en cours d'exécution et il fait le travail, mais ne répète pas si rien n'est entré, il ne se répète qu'une fois que quelque chose est entré dans "données" suis-je faire quelque chose de mal? – Ryan

+0

Ça devrait marcher, avez-vous attendu 60 secondes et rien n'est arrivé? – ettanany

+0

@Ryan S'il vous plaît jeter un oeil à ma réponse éditée – ettanany