使用 sleep python 2.7 循环处理信号



这可能是一个简单的情况,我希望很多人都会遇到它。 我有一个简单的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)

我今天遇到了同样的问题。下面是一个模仿 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)

最新更新