这可能是一个简单的情况,我希望很多人会遇到它。 我有一个简单的python程序,可以执行某些操作并在无限循环中休眠一段时间。我想使用信号使这个程序优雅地退出SIGHUP。现在当一个信号在睡眠时被发送到callee.py时,程序立即退出,而我希望它完成睡眠然后退出。
是否有任何解决方法可以绕过此行为?我也对任何其他方法持开放态度。
注意:这与python3一样正常,但是我无法移植现在在python 2.7到3中的模块。
这是我的代码:
callee.py
stop_val = False
def should_stop(signal, frame):
print('received signal to exit')
global stop_val
stop_val = True
def main():
while not stop_val:
signal.signal(signal.SIGTERM, should_stop)
# do something here
print('Before sleep')
time.sleep(300)
print('after sleep')
caller.py
pid = xxx;
os.system('kill -15 %s' % pid)
答案 0 :(得分:0)
我今天遇到了同样的问题。这是一个模仿python3行为的简单包装器:
def uninterruptable_sleep(seconds):
end = time.time()+seconds
while True:
now = time.time() # we do this once to prevent race conditions
if now >= end:
break
time.sleep(end-now)