Python,期待无限循环

时间:2013-03-30 19:23:32

标签: python time infinite-loop

我的代码可能有无限循环。我希望能够在代码中阻止它,是否有一些可以做到这一点?有点像:

for i to range(0,5):
    timer = on
    run(x)
    #while run is running 
    if timer.time > 30:
        exit run(x)
        print("out of time ")
    print(timer.time)

因此输出可能是:3,2,时间30,2,超出时间30

我担心这可能需要线程,我在C和Java中尝试过,但是从来没有python。

1 个答案:

答案 0 :(得分:3)

一些选择:

  1. 如果您可以修改run的“无限”循环,请检查时间。这可能是最简单的。
  2. 如果在Linux / UNIX上,您可以使用signal.alarmSIGALRM处理程序在一段固定的时间后中断。
  3. 当时间流逝时,您可以生成一个单独的线程和kill the other thread。这是相当讨厌的,只有在你使用Windows(或关心可移植性)并且无法修改run时才能使用。
  4. 您可以将run生成到一个单独的进程中,并在时间到期时终止该进程(例如使用multiprocessing)。
  5. 以下是使用signal.alarm中断计算的示例:

    import signal
    
    class TimeoutException(Exception):
        pass
    
    def alarm_handler(*args):
        raise TimeoutException()
    
    def tryrun(func, timeout=30):
        oldhandler = signal.signal(signal.SIGALRM, alarm_handler)
        try:
            signal.alarm(timeout)
            func()
        except TimeoutException:
            print "Timeout"
        else:
            print "Success"
        finally:
            signal.alarm(0) # disarm alarm
            signal.signal(signal.SIGALRM, oldhandler)
    
    import time
    tryrun(lambda: time.sleep(10), 5) # prints Timeout
    tryrun(lambda: time.sleep(2), 5)  # prints Success