[Zope] Re: zope fork in external method

Jonathan dev101 at magma.ca
Fri Oct 13 12:50:55 EDT 2006

Pls keep your posts on the list  - so that others can help and so that 
others can search for problems/solutions!

----- Original Message ----- 
From: "Daniel Lopez" <dev101 at vivademocracy.com>
To: <dev101 at magma.ca>
Sent: Friday, October 13, 2006 12:13 PM
Subject: zope fork in external method

> Jonathan-
> I'm emailing you because I saw your post a few months back at:
> http://mail.zope.org/pipermail/zope/2006-May/166574.html
> I've been doing my best to find answers on existing posts, but to no 
> avail.  Perhaps you can send further pointers?
> On my system, a user can hit a page that initiates a long database query. 
> If the user hits the stop button and tries to refresh, it messes things up 
> (by interrupting the code upon return of the query), so I came up with a 
> solution that almost works:
> I put all the code into an external method, which forks.  The parent 
> returns a redirect to a "waiting" throbber page that uses Ajax to poll 
> whether the query is done.  The child then goes on to do the hard work.
> This is working as desired, with a single exception: zombie child 
> processes.  Where can I learn more about forking processes in zope 
> external methods?  I've read about the double-fork method, but that hasn't 
> resolved the problem...

A few ideas for reaping dead child processes:

1) implement a SIGCHLD handler

2) when a spawned child process is finished its 'zope processing' have it 
write its process id to a file (be careful when accessing files, you will 
need locking to eliminate problems that may be caused by zope's multiple 
threads) and then have a clean up routine which kills all of the processes 
listed in the file (this could be an independant clean-up routine which 
wakes up on a regular basis, or it could be built into the 'spawning' 
process which does the clean up before it spawns a child).

3) as the last thing it does, have the child process issue a kill -9 system 
command to kill its own process (I haven't tried this myself, but it may 
work and it would be simple to implement)

Good luck!


More information about the Zope mailing list