stopping a python windows service

D

DK

i was able to successfully create a windows service using py2exe. it
polls a website periodically and logs it to a file. this is done using
a function that does an infinite loop with periodic "sleeps".

my question is...

what's the best way to stop this service gracefully?

when try to stop it from the services applet from control panel, it
takes forever and then gives me an error.

currently, the only way i am able to stop it is using the task manager
and killing the process.
 
B

Benjamin Niemann

DK said:
i was able to successfully create a windows service using py2exe. it
polls a website periodically and logs it to a file. this is done using
a function that does an infinite loop with periodic "sleeps".

my question is...

what's the best way to stop this service gracefully?

when try to stop it from the services applet from control panel, it
takes forever and then gives me an error.

currently, the only way i am able to stop it is using the task manager
and killing the process.

Windows services generally use two threads: one to do the work and one to
listen for messages from the
whatever-the-component-is-called-to-control-services.
When the message thread received a 'stop' message, it should inform the
worker thread to shut down, e.g. using threading.Event. So your worker
should regularily check for the shutdown event, e.g.:

while not shutdownEvent.isset():
pollWebsite()

for i in xrange(1800):
if shutdownEvent.isset():
break
time.sleep(1)

But if you get the 'stop' message while the worker thread is in
pollWebsite() and the webserver is sloooow, you'll still have a significant
delay... To avoid this, you would need a http client based on select() that
allows you to check shutdownEvent.isset() at certain intervals - instead of
urlopen which just blocks.
 
D

Do Re Mi chel La Si Do

Hi !

Use SC.exe (windows-XP) (with popen ?)
For help : sc /?


You can, also, try :
qprocess /?
tasklist /?
taskkill /?
etc.

@-salutations

Michel Claveau
 
D

DK

I may have taken your code example too literally. I tried putting in
the check for 'shutdownEvent.isset()' but it's failing at run time.
It's looking for a global variable, I guess.

Do I have to register these threads somehow in the beginning?

I'm somewhat new to Python so please be patient...
 
D

Dennis Lee Bieber

I may have taken your code example too literally. I tried putting in
the check for 'shutdownEvent.isset()' but it's failing at run time.
It's looking for a global variable, I guess.
"shutdownEvent" is an event instance created using the threading
module.
Do I have to register these threads somehow in the beginning?
You'll have to create an Event object, a worker thread, and perhaps
leave the main thread as the monitor for system shutdown events.
I'm somewhat new to Python so please be patient...

Why do I find it discomforting that people new to the language keep
wanting to do deep OS specific actions in their first week?

{Granted, my first program was a rudimentary "sendmail" for my Amiga,
using ARexx scripts from the email client to queue messages into a temp
directory, and waking up, if needed, the Python program to parse the
to:, cc:, and bcc: headers, handshaking with the ISP's outgoing daemon
-- but everything I wrote was native Python; no OS specific code.
I needed to do this as the downloadable "sendmails" had major flaws:
the first one created a message file for each recipient, and would get
stuck if one of the recipient addresses wasn't receiving (this was back
in the days before ISPs locked port 25 passthrough); the second relayed
via the ISP -- but did not handshake the cc/bcc addresses, so such never
received the mail.}
--
 
P

Peter Hansen

DK said:
I may have taken your code example too literally. I tried putting in
the check for 'shutdownEvent.isset()' but it's failing at run time.
It's looking for a global variable, I guess.

Or perhaps "it" is just looking for correct capitalization, since Python
is case sensitive. Try shutdownEvent.isSet() instead.

-Peter
 

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,744
Messages
2,569,484
Members
44,903
Latest member
orderPeak8CBDGummies

Latest Threads

Top