How to kill a thread?

Gerhard Häring gh at ghaering.de
Fri Jun 6 07:21:52 EDT 2008


John Dohn wrote:
> Hi there,
> 
> How can I kill a threading.Thread subclass from MainThread?
> 
> My threads are waiting for data in Queue.get() method:
> class MyThread(threading.Thread):
>     def run(self):
>         while True:
>             data = queue.get()    # <- here it waits most of the time
>             ... process data
> 
>  From the main thread I start several working threads:
> thr = MyThread()
> thr.start()
> ... feed the queue
> and at the end for each thread I'd like to do something like thr.kill() 
> or thr.stop() or thr.destroy() or ... you got the point. I can't figure 
> out how.
> 
> Is there a way to do it?

When I do this, I put a special value in the queue (like None) and in 
the worker thread, check for the special value and exit if found.

Threads can also be marked as "daemon threads" (see docs for 
threading.Thread objects). This will make the application terminate if 
only "daemon threads" are left.

So best would probably be soemthing like

- call setDaemon() when creating worker threads
- ...
- send all worker/daemon threads None via queue
- wait some time, like time.sleep(1.0), to let daemon exit themselves
- exit main application

-- Gerhard




More information about the Python-list mailing list