Python signal handler weird behavior

16 Views Asked by At

As far as I know, the signal handler in Python is executed in main thread, so I try the following script:

import signal, time
from threading import Event

def main():
        running = True
        event = Event()

        def handler(signal, frame):
                print("Value of event: %s" % event.is_set())
                print("Value of running: %s" % running)
                event.set()
                running = False

        signal.signal(signal.SIGINT, handler)
        while running:
                time.sleep(10)

if __name__ == '__main__':
        main()

After starting the program, I type Ctrl+C then the program raises the exception:

UnboundLocalError: local variable 'running' referenced before assignment

As soon as I remove the line:

running = False

the program works fine. The value of event is False for the first Ctr-C then True for next times as expected.

So what is the problem of the code and the underlining mechanism of the handler when procesing basic type vs object?

0

There are 0 best solutions below