Advice on long running processes

Roy Smith roy at panix.com
Thu Oct 11 10:48:18 EDT 2007


commander_coder at hotmail.com wrote:

> Hello,
> 
> I write a lot of CGI scripts, in Python of course.  Now I need to
> convert some to long-running processes.  I'm having trouble finding
> resources about the best practices to do that.
> 
> I've found a lot of email discussions that say something like, "You
> need to educate yourself about the differences when you have long-
> running processes" but I've not had a lot of luck with finding things
> that explain the differences.

The biggest differences between run-and-exit vs. long running processes are 
resource management and error recovery.  Let's take them one at a time.

Resource management.  In a short-lived process, you really don't have to 
worry about this at all.  Snarf as much memory as you need, open as many 
files as you want, and when you exit, the operating system cleans it all up 
for you.  With a long running process, you have to worry about stuff like 
that.

In Python, you're isolate from the low-level details of memory management, 
but still need to think about it a bit.  Imagine you had code that looked 
like this in your main loop:

for request in getNextRequest():
    requestList.append (request)
    processRequest(request)

requestList is going to keep growing without bounds and eventually will eat 
up all available memory in the system and your process will crash.  
Everything you store, you also need to delete when you're done with it.

Same with files.  In a short-lived process, you can generally open as many 
files as you want and never worry about closing them.  It unlikely you will 
ever run out of file descriptors.  In a long running process, that's not 
the case.  If you open a new file each time you get a request and never 
close it, after a few hundred requests (depending on the operating system, 
maybe even a few thousand), you'll run out of file descriptors.

The other big thing is error recovery.  In a short lived process, if 
something fails, you print an error message and exit.  In a long running 
process, you need to somehow recover from the error and keep going as best 
you can.  This can be tricky.



More information about the Python-list mailing list