By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
443,818 Members | 1,262 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 443,818 IT Pros & Developers. It's quick & easy.

win32 service and time.sleep()

P: n/a
rbt
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
Sep 20 '05 #1
Share this Question
Share on Google+
2 Replies


P: n/a
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.

Sep 20 '05 #2

P: n/a
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
Sep 22 '05 #3

This discussion thread is closed

Replies have been disabled for this discussion.