我正在 Python 中调用一个函数,我知道该函数可能会停止并迫使我重新启动脚本。
如何调用该函数或者将其包装在什么中,以便如果花费时间超过 5 秒,脚本就会取消该函数并执行其他操作?
您可以使用signal http://docs.python.org/library/signal.html如果您在 UNIX 上运行,请安装软件包:
In [1]: import signal
# Register an handler for the timeout
In [2]: def handler(signum, frame):
...: print("Forever is over!")
...: raise Exception("end of time")
...:
# This function *may* run for an indetermined time...
In [3]: def loop_forever():
...: import time
...: while 1:
...: print("sec")
...: time.sleep(1)
...:
...:
# Register the signal function handler
In [4]: signal.signal(signal.SIGALRM, handler)
Out[4]: 0
# Define a timeout for your function
In [5]: signal.alarm(10)
Out[5]: 0
In [6]: try:
...: loop_forever()
...: except Exception, exc:
...: print(exc)
....:
sec
sec
sec
sec
sec
sec
sec
sec
Forever is over!
end of time
# Cancel the timer if the function returned before timeout
# (ok, mine won't but yours maybe will :)
In [7]: signal.alarm(0)
Out[7]: 0
通话后 10 秒signal.alarm(10)
,处理程序被调用。这会引发一个异常,您可以从常规 Python 代码中拦截该异常。
该模块不能很好地与线程配合使用(但是,谁能配合呢?)
注意由于我们在发生超时时引发异常,因此它最终可能会在函数内部被捕获并忽略,例如这样一个函数:
def loop_forever():
while 1:
print('sec')
try:
time.sleep(10)
except:
continue
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)