Stopping a Thread with Time Slicing
Todd Whiteman
toddw at activestate.com
Thu Oct 2 19:40:09 EDT 2008
Steve wrote:
> Hi All,
>
> I've been trying to come up with a good way to run a certain process
> at a timed interval (say every 5 mins) using the SLEEP command and a
> semaphore flag. The basic thread loop was always sitting in the sleep
> command and not able to be interrupted. When the time came to set the
> semaphore flag to false (stopping the thread), my program would have
> to wait up to the entire sleep time to break out of the loop.
>
> I have finally found a very workable solution to break out of the
> sleep loop by using a time slicing loop to divide the overall sleep
> time into small pieces (slices) giving the loop more opportunities to
> be interrupted.
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
More information about the Python-list
mailing list