win32 service and time.sleep()

Steve Horsley steve.horsley at gmail.com
Thu Sep 22 23:37:12 CEST 2005


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



More information about the Python-list mailing list