Paul Winkler writes:
I'm using zope 2.4.3 on linux (redhat 7 with kernel 2.4.14), playing around with the Photo product (nice one!). I've had a few zope freezes, and finally found a pattern: Occasionally, if using ImageMagick to do the rendering for Photo, convert will fail to complete and Zope will then become completely unresponsive. Browser requests do nothing.
This is weird. I can understand how one of the Zope threads might get stuck waiting for the never-ending external process; but why should Zope become completely unresponsive? Shouldn't the other threads keep responding? They should (and usually do). Maybe a problem in Python: forgets to release the Global Interpreter Lock for the system call you use to start your process....
And is there a way to set a timeout for an external process, such that zope can recover if it fails to return for too long? If you use "os.system", then I fear there is no safe way. For "os.popen" (or variants thereof), you might be able to use "select" (with a timeout) to check whether the partner closed the file descriptor. If so, you abandon the process (without closing the file, neither explicitly nor implicitly!, i.e. must go into a global variable, preferably a list.). Of course, you will leak file descriptors in this case.
Dieter