Il Thu, 10 Dec 2009 23:10:02 +0000, Matthew Barnett ha scritto: > mattia wrote: >> Il Thu, 10 Dec 2009 04:56:33 +0000, Brad Harms ha scritto: >> >>> On Thu, 10 Dec 2009 00:29:45 +0000, mattia wrote: >>> >>>> Il Wed, 09 Dec 2009 16:19:24 -0800, Jon Clements ha scritto: >>>> >>>>> On Dec 9, 11:53 pm, mattia <ger...@gmail.com> wrote: >>>>>> Hi all, can you provide me a simple code snippet to interrupt the >>>>>> execution of my program catching the KeyboardInterrupt signal? >>>>>> >>>>>> Thanks, >>>>>> Mattia >>>>> Errr, normally you can just catch the KeyboardInterrupt exception -- >>>>> is that what you mean? >>>>> >>>>> Jon. >>>> Ouch, so the simplest solution is just insert in the 'main' function >>>> a try/catch? I believed there was the necessity to create a signal >>>> and than attach the KeyboardInterrupt to it... >>> >>> KeyboardInterrupt is just an exception that gets raised when CTLR+C >>> (or the OS's equivalent keyboard combo) gets pressed. It can occur at >>> any point in a script since you never know when the user will press >>> it, which is why you put the try: except KeyboardInterrupt: around as >>> much of your script as possible. The signal that the OS sends to the >>> Python interpreter is irrelevant. >> >> Ok, so can you tell me why this simple script doesn't work (i.e. I'm >> not able to catch the keyboard interrupt)? >> >> import time >> import sys >> from threading import Thread >> >> def do_work(): >> for _ in range(1000): >> try: >> time.sleep(1) >> print(".", end="") >> sys.stdout.flush() >> except KeyboardInterrupt: >> sys.exit() >> >> def go(): >> threads = [Thread(target=do_work, args=()) for _ in range(2)] for t >> in threads: >> t.start() >> for t in threads: >> t.join() >> >> go() > > Only the main thread can receive the keyboard interrupt.
Ok, so is there any way to stop all the threads if the keyboard interrupt is received? -- http://mail.python.org/mailman/listinfo/python-list