win32 service and time.sleep()
steve.horsley at gmail.com
Thu Sep 22 23:37:12 CEST 2005
> 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.
More information about the Python-list