Hi Todd, Thanks for your suggestions on using the Event condition methods on this thread.
Here is my updated code : import time import datetime import threading def log(message): now = datetime.datetime.now().strftime("%H:%M:%S") print "%s : %s" % (now, message) class StoppableThread(threading.Thread): def __init__(self, sleep_time, function, args=[], kwargs={}): self.sleep_time = sleep_time threading.Thread.__init__(self) self.function = function self.args = args self.kwargs = kwargs self.finished = threading.Event() def run(self): while not self.finished.isSet(): # loop while condition is true log('** Doing Work') self.function(*self.args, **self.kwargs) # run the function self.finished.wait(self.sleep_time) # put thread in wait state log('** Thread Has STOPPED!') def stop(self): # stop the thread from running log('* Stopping Thread') self.finished.set() self.join() def my_function (a, b, c): log('my_function running... %s' % a) ##################################################################### # T E S T ##################################################################### SMALL_SLEEP = 35 CHECK_SLEEP = 300 # sleep interval in seconds to run a timed process log('Create Thread') thread_obj = StoppableThread(CHECK_SLEEP, my_function, (15,0,-1)) log('Thread Start\n') thread_obj.start() for current_loop in range(0,10): time.sleep(SMALL_SLEEP) log('current loop = %d \n' % current_loop) log('Call Thread Stop') thread_obj.stop() log('Done!') Test Output : >python Simple_Thread_Stop_Event.py 12:58:42 : Create Thread 12:58:42 : Thread Start 12:58:42 : ** Doing Work 12:58:42 : my_function running... 15 12:59:17 : current loop = 0 12:59:52 : current loop = 1 13:00:27 : current loop = 2 13:01:02 : current loop = 3 13:01:37 : current loop = 4 13:02:12 : current loop = 5 13:02:47 : current loop = 6 13:03:22 : current loop = 7 13:03:42 : ** Doing Work 13:03:42 : my_function running... 15 13:03:57 : current loop = 8 13:04:32 : current loop = 9 13:04:32 : Call Thread Stop 13:04:32 : * Stopping Thread 13:04:32 : ** Thread Has STOPPED! 13:04:32 : Done! On Oct 2, 4:40 pm, Todd Whiteman <[EMAIL PROTECTED]> wrote: > Steve wrote: > > A better approach for this is to use a Python Event or Condition > object:http://docs.python.org/library/threading.html#id5 > > Example code: > > import threading > my_stop_event = threading.Event() > > # Sleep Loop : > #for current_loop in range(0, self.time_slice) : > # time.sleep(self.sleep_time / self.time_slice) > > event.wait(self.sleep_time) > if not self.running: # check the flag > break # break out of the sleep loop > > # From another thread, you can notify the above sleeping thread using: > my_stop_event.set() > > Cheers, > Todd -- http://mail.python.org/mailman/listinfo/python-list