Handling signals and performance issues.
Ian Parker
parker at gol.com
Sat Dec 9 20:43:26 EST 2000
In article <meRU5.211$Mx.12164 at sjc-read.news.verio.net>, Ray Van Dolson
<rayvd at nospam.firetail.org> writes
>I've written a small Python script that watches a logfile (kinda like tail -
>f) and splits it into certain other files in real time. I'm running into
>two issues however that I haven't quite resolved yet to get this script
>running as I'd like it. Firstly, the program uses up a lot of CPU time.
>This is almost certainly because of the way I'm watching the logfiles for
>changes. Basically it's like this:
>
>while 1:
> ln=inputLog.readline()
> if ln:
> processLine(ln)
> else:
> pass
>
>Much of the time of course there have been no changes to the logfile and so
>it keeps looping, passing and waiting for a change. While the system
>actually remains fast, watching 'top' shows that python is using up all the
>cpu when it can. Is there a better way to watch a file for changes that
>doesn' use such a cpu consuming while loop?
>
>My second problem is that while the program handles a CTRL-C, etc well--
>cleaning up and the like, if it is sent a kill -9 or kill -HUP by root or
>the user spawning the process it dies a horrible death--ie, it doesn't clean
>up and flush its buffers, or run the 'cleanup' functions I've defined with a
>try: except: block. How can I watch for a kill -9 or kill -HUP and have my
>script respond accordingly before shutting down?
>
>Thanks much for any help provided.
>Ray Van Dolson
How about putting a "time.sleep(n)" in place of the "pass" statement?
That way you'd pause for a while when there was no new data in the log
file, but continue to loop quickly if multiple lines had been appended
during the previous n seconds.
--
Ian Parker
More information about the Python-list
mailing list