使用sleep python 2.7循环进行信号处理

时间:2017-06-30 19:28:28

标签: python python-2.7 signals

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

1 个答案:

答案 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)