Velocity Reviews

Velocity Reviews (http://www.velocityreviews.com/forums/index.php)
-   Python (http://www.velocityreviews.com/forums/f43-python.html)
-   -   win32 service and time.sleep() (http://www.velocityreviews.com/forums/t349332-win32-service-and-time-sleep.html)

rbt 09-20-2005 02:49 PM

win32 service and time.sleep()
 
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?

Thanks,
rbt

Oracle 09-20-2005 03:35 PM

Re: win32 service and time.sleep()
 
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.




Steve Horsley 09-22-2005 09:37 PM

Re: win32 service and time.sleep()
 
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


All times are GMT. The time now is 06:40 AM.

Powered by vBulletin®. Copyright ©2000 - 2014, vBulletin Solutions, Inc.
SEO by vBSEO ©2010, Crawlability, Inc.