Oracle wrote: > On Tue, 20 Sep 2005 10:49:13 -0400, rbt wrote: > >> I have a win32 service written in Python. It works well. It sends a >> report of the status of the machine via email periodically. The one >> problem I have is this... while trying to send an email, the script >> loops until a send happens and then it breaks. Should it be unable to >> send, it sleeps for 10 minutes with time.sleep(600) and then wakes and >> tries again. This is when the problem occurs. I can't stop the service >> while the program is sleeping. When I try, it just hangs until a reboot. >> Can some suggest how to fix this? >> > > You could try doing it the hard way. In a loop, sleep for 1-5 seconds at > a time. Everytime you complete a sleep, check the elapsed time. If the > elapsed time is >= the total sleep duration, fall out of the sleep loop > and try your email again. This should allow your service to stop within > 1-5 seconds of your request while imposing little to no load on the system.
I adopted that solution just last week. When you wake (every few seconds), you check for a stop flag (and exit if needed of course) before checking if its time to do work-work. Works a treat. Another option is to use a threading.Condition, and have the service thread wait(600). The thread that calls to stop the service can set the stop flag and then notify() the Condition. Steve -- http://mail.python.org/mailman/listinfo/python-list