【发布时间】:2016-07-02 09:25:35
【问题描述】:
我想创建一个计时器,以便特定的代码行只有 60 秒的时间来处理。
def foo():
for i in xrange(10):
output = action(arg1, arg2)
print i
如果此操作花费超过 60 秒,则不要打印 i,而是继续下一个。我该怎么做?
action 不是一个循环,所以计时器不起作用。我也尝试过信号,但这也不起作用,因为我有这些嵌套的内部循环,我收到一条错误消息:ValueError: signal only works in main thread // Werkzeug Debugger。
这是我迄今为止对信号的尝试以及我得到的错误:
文件名.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 行
引发超时异常
fileName.TimeoutException
【问题讨论】:
标签: python timer exception-handling signals multiprocess