you can also run all threads as daemonized threads (or "detached" in
POSIX). daemon threads exit immediately and do not expect another thread to
wait on their exit value.
thread.setDeamon(1)
thread.start()
http://docs.python.org/lib/thread-objects.html
it'll allow you to Ctrl+C any python threaded program because the thread
will immediately exit withouth waiting on the main thread to join it.
of course, this can't work if you want to know the exit value of a thread.
-matt
On 1/23/08, Matthias Blankenhaus <[EMAIL PROTECTED]> wrote:
>
>
>
> On Wed, 23 Jan 2008, Brad Nicholes wrote:
>
> > I am running into another problem since the switch to popen2 in
> tcpconn.py. After running for several days, the tcpconn.py module died
> due to too many open files. The traceback points back to the popen2
> call. Does anybody know what needs to be cleaned up? I saw some examples
> of having to close stdin. Do we need to close stdin, stdout and stderr? or
> is there something else that is missing.
>
> Here is a patch that fixes the open fds and also allows you now to ctrl-c
> the code:
>
> diff -u tcpconn.py tcpconn.py.new
> --- tcpconn.py 2008-01-23 11:43:05.000000000 -0800
> +++ tcpconn.py.new 2008-01-23 11:44:30.000000000 -0800
> @@ -32,6 +32,7 @@
>
> import os, sys, popen2
> import threading
> +import select
> import time
>
> _WorkerThread = None #Worker thread object
> @@ -174,14 +175,22 @@
> '''This thread contunually gathers the current states of the tcp
> socket
> connections on the machine. The refresh rate is controlled by the
> RefreshRate parameter that is passed in through th gmond.conf
> file.'''
> -
> +
> def __init__(self):
> threading.Thread.__init__(self)
> self.running = False
> self.shuttingdown = False
> + self.popenChild = None
>
> def shutdown(self):
> self.shuttingdown = True
> + if self.popenChild != None:
> + try:
> + self.popenChild.wait()
> + except OSError, e:
> + if e.errno == 10: # No child processes
> + pass
> +
> if not self.running:
> return
> self.join()
> @@ -210,9 +219,17 @@
> tempconns[conn] = 0
>
> #Call the netstat utility and split the output into separate
> lines
> - netstat_output=popen2.popen2(["netstat", '-t', '-a'],
> mode='r')[0].read()
> - lines = netstat_output.splitlines()
> - os.wait()
> + fd_poll = select.poll()
> + self.popenChild = popen2.Popen3("netstat -t -a")
> + fd_poll.register(self.popenChild.fromchild)
> +
> + poll_events = fd_poll.poll()
> +
> + if (len(poll_events) == 0): # Timeout
> + continue
> +
> + for (fd, events) in poll_events:
> + lines = self.popenChild.fromchild.readlines()
>
> #Iterate through the netstat output looking for the 'tcp'
> keyword in the tcp_at
> # position and the state information in the tcp_state_at
> position. Count each
> @@ -284,11 +301,16 @@
>
> #This code is for debugging and unit testing
> if __name__ == '__main__':
> - params = {'Refresh': '20'}
> - metric_init(params)
> - while True:
> - for d in _descriptors:
> - v = d['call_back'](d['name'])
> - print 'value for %s is %u' % (d['name'], v)
> - time.sleep(5)
> + try:
> + params = {'Refresh': '20'}
> + metric_init(params)
> + while True:
> + for d in _descriptors:
> + v = d['call_back'](d['name'])
> + print 'value for %s is %u' % (d['name'], v)
> + time.sleep(5)
> + except KeyboardInterrupt:
> + time.sleep(0.2)
> + os._exit(1)
> +
>
>
> >
> > Brad
> >
> >
> >
> -------------------------------------------------------------------------
> > This SF.net email is sponsored by: Microsoft
> > Defy all challenges. Microsoft(R) Visual Studio 2008.
> > http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
> > _______________________________________________
> > Ganglia-developers mailing list
> > [email protected]
> > https://lists.sourceforge.net/lists/listinfo/ganglia-developers
> >
>
> -------------------------------------------------------------------------
> This SF.net email is sponsored by: Microsoft
> Defy all challenges. Microsoft(R) Visual Studio 2008.
> http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
> _______________________________________________
> Ganglia-developers mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/ganglia-developers
>
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Ganglia-developers mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ganglia-developers