只允许一行python的特定秒数

时间:2016-07-02 09:25:36

标签: python timer exception-handling signals multiprocess

我想创建一个计时器,以便特定的代码行只有60秒的时间来处理。

def foo():

 for i in xrange(10):
      output = action(arg1, arg2)
      print i

如果此操作超过60秒,则不要打印i,但只需继续下一个。我怎么能这样做?

动作不是循环,所以计时器不起作用。我也试过信号,但这也行不通,因为我有这些嵌套的内部循环,我得到一个错误说:ValueError:signal只能在主线程中运行// Werkzeug Debugger。

这是我迄今为止尝试过的信号以及我得到的错误:

fileName.py

class TimeoutException(Exception):   
     pass
def timeout_handler(signum, frame):   
     raise TimeoutException
signal.signal(signal.SIGALRM, timeout_handler)

def foo():
     signal.alarm(60)    
     try:
        output = foo2(arg1, arg2)
     except TimeoutException:
        continue 
    else:
        # Reset the alarm
        signal.alarm(0)

我这样做,而不是提出应该通过的异常,然后最终继续我的操作,我得到了这个并且脚本终止。

timeout_handler中的第X行

引发TimeoutException

fileName.TimeoutException

1 个答案:

答案 0 :(得分:0)

import time
for i in xrange(10):
    time_start = time.time()
    output = action(arg1, arg2)
    if time.time() - time_start <= 60:
        print i