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

stopping a python windows service

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

Aug 16 '05 #1
Share this Question
Share on Google+
6 Replies


P: n/a
DK wrote:
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.
--
Benjamin Niemann
Email: pink at odahoda dot de
WWW: http://www.odahoda.de/
Aug 16 '05 #2

P: n/a
Here are 2 recipes from the online Python Cookbook. I've used this one
very successfully:
<http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/115875>.

This one seems simpler:
<http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/59872>

Grig

Aug 16 '05 #3

P: n/a
Hi !

Use SC.exe (windows-XP) (with popen ?)
For help : sc /?
You can, also, try :
qprocess /?
tasklist /?
taskkill /?
etc.

@-salutations

Michel Claveau

Aug 16 '05 #4

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

Aug 17 '05 #5

P: n/a
On 17 Aug 2005 06:20:46 -0700, "DK" <pr*****@gmail.com> declaimed the
following in comp.lang.python:
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.}
-- ================================================== ============ <
wl*****@ix.netcom.com | Wulfraed Dennis Lee Bieber KD6MOG <
wu******@dm.net | Bestiaria Support Staff <
================================================== ============ <
Home Page: <http://www.dm.net/~wulfraed/> <
Overflow Page: <http://wlfraed.home.netcom.com/> <

Aug 17 '05 #6

P: n/a
DK wrote:
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
Aug 18 '05 #7

This discussion thread is closed

Replies have been disabled for this discussion.