【发布时间】:2016-04-25 00:49:20
【问题描述】:
我稍微修改了official docs(页面底部)的信号示例。
我正在致电sleep 10,但我希望在 1 秒后发出警报。当我运行以下 sn-p 时,触发异常需要超过 1 秒(我认为它运行了整整 10 秒)。
import signal, os
def handler(signum, frame):
print 'Interrupted', signum
raise IOError("Should after 1 second")
signal.signal(signal.SIGALRM, handler)
signal.alarm(1)
os.system('sleep 10')
signal.alarm(0)
如何确保在单线程应用程序中超时后终止函数?
【问题讨论】:
-
您对系统
sleep的调用不会暂停所有内容,包括信号计时器吗?闹钟没有响,因为它也睡着了。您可能必须使用subprocess模块将sleep调用推送到单独的进程中。