函数返回时停止SIGALRM

Osc*_*car 2 python signals python-2.7

我有一个自己似乎无法解决的问题。我正在写一个小的python脚本,我想知道为什么signal.alarm返回它的函数后我仍然可以工作。这是代码:

class AlarmException(Exception):
    pass

def alarmHandler(signum, frame):
    raise AlarmException

def startGame():
    import signal
    signal.signal(signal.SIGALRM, alarmHandler)
    signal.alarm(5)
    try:
        # some code...
        return 1
    except AlarmException:
        # some code...
        return -1

def main():
    printHeader()
    keepPlaying = True
    while keepPlaying:
        score = 0
        for level in range(1):
            score += startGame()
        answer = raw_input('Would you like to keep playing ? (Y/N)\n')
        keepPlaying = answer in ('Y', 'y')
Run Code Online (Sandbox Code Playgroud)

因此问题在于,当我的startGame()函数返回时,SIGALRM仍在递减并关闭程序。这是回溯:

Would you like to keep playing ? (Y/N)
Traceback (most recent call last):
  File "game.py", line 84, in <module>
    main()
  File "game.py", line 80, in main
    answer = raw_input('Would you like to keep playing ? (Y/N)\n')
  File "game.py", line 7, in alarmHandler
    raise AlarmException
__main__.AlarmException
Run Code Online (Sandbox Code Playgroud)

当退出其功能时,如何对SIGALRM说停止?

谢谢 !

Eri*_*ikR 5

signal.alarm(0)当您想禁用闹钟时,尝试拨打电话。

它很可能只是alarm()在libc中调用,并man alarmalarm(0)“ ...使当前警报无效,并且不会传递SIGALRM信号。”