[Twisted-Python] spawnProcess help needed

Jean-Paul Calderone exarkun at divmod.com
Tue Dec 9 15:41:53 MST 2008


On Tue, 9 Dec 2008 15:43:00 -0500, Phil Christensen <phil at bubblehouse.org> wrote:
>Hello All-
>
>I'm running into an issue with a project I'm working on that involves 
>coordinating a large number of external processes to encode audio into 
>different formats, and do other bookkeeping.
>
>I seem to be having a problem when I use spawnProcess to call the  md5sum 
>binary. The processes spawned seem to stick around forever,  until I kill 
>the server. This doesn't appear to happen with any other  binary.
>
>I start with the following abstract class:
>
> [snip MD5Checksum ProcessProtocol]
>
>With the plan of executing it inside an inlineCallbacks-decorated  function, 
>like this:
>
>         proto = yield process.MD5Checksum.run(filename)
>         checksum = proto.get_checksum()
>
>Everything is basically working, except for the fact that the md5sum 
>processes never go away. It does seem that processEnded is being  called, 
>since that's what issues the callback on the deferred returned  by run(), 
>but the process sticks around, as a non-zombie, non-defunct  process that 
>still appears to be using small amounts of CPU time.

processEnded shouldn't be called until the child has exited and been
reaped.  This means that the md5sum process should not still exist in
any form if processEnded is being called.  So either the processes you're
seeing aren't associated with the ProcessProtocol instances you think, or
there's a pretty serious bug in Twisted. :)

A self-contained example of this behavior would be pretty handy.  You should
probably start by making sure processEnded is really being called for the
ProcessProtocol instances associated with the processes which aren't actually
exiting.

>
>Also, once the checksum has been retrieved, killing the server doesn't 
>cause any errors, unlike when a process is legitimately terminated by 
>killing the server, which displays an error (since right now i'm not 
>actually catching ProcessTerminated scenarios):
>
>     2008-12-09 15:17:48-0500 [-] Unhandled error in Deferred:
>     2008-12-09 15:17:48-0500 [-] Unhandled Error
>         Traceback (most recent call last):
>         Failure: twisted.internet.error.ProcessTerminated: A process  has 
>ended with a probable
>     error condition: process ended by signal 2.
>
>Any help in this matter would be appreciated...
>

Jean-Paul




More information about the Twisted-Python mailing list