KeyboardInterrupt

Lie Ryan lie.1296 at gmail.com
Thu Dec 10 21:33:35 EST 2009


On 12/11/2009 10:43 AM, mattia wrote:
> Ok, so is there any way to stop all the threads if the keyboard interrupt
> is received?

You can't stop a thread from outside. The thread has to end itself (by 
ending the function). Usually, in the thread, you will check the value 
of a variable. If it's false, then it's time to stop and head to the end 
of the function.

# global, or better use a Quit sentinel in a Queue
import time, sys
from threading import Thread
running = True

def do_work():
     while True:
         time.sleep(1)
         print(".", end="")
         sys.stdout.flush()
         if running == False:
             break
     print('thread ended')

def go():
     global running
     threads = [Thread(target=do_work, args=()) for _ in range(2)]
     for t in threads:
         t.start()
     try:
         while running:
             time.sleep(1)
             running = any(t.is_alive() for t in threads)
     except KeyboardInterrupt:
         running = False




More information about the Python-list mailing list