win32 service and time.sleep()

R

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
 
O

Oracle

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.
 
S

Steve Horsley

Oracle said:
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
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,755
Messages
2,569,537
Members
45,023
Latest member
websitedesig25

Latest Threads

Top