[Twisted-Python] spawnProcess - reapProcess not retrying on failures
exarkun at twistedmatrix.com
exarkun at twistedmatrix.com
Fri Sep 5 06:13:55 MDT 2014
On 06:30 am, adi at roiban.ro wrote:
>On 4 September 2014 12:59, <exarkun at twistedmatrix.com> wrote:
>[snip]
>>What would be really nice is if someone collected *all* of the
>>complaints
>>about `spawnProcess` into one place and integrated solutions to them
>>into a
>>design for a replacement. :)
>>
>>Jean-Paul
>
>Since I can not create wiki pages here are my notes:
>
>To do:
>
>* Always return a deferred. #2415
>
>* Provide the option to timeout the execution... and on timeout errback
>with
> a dedicated failure #2415
>
>* Add childs to the same process group #2415
>
>* allways errback when failing to spawn (rather than raising OSError)
>and
> errback with a different failure when failing to spawn the executable
>#4184
>
>* on Unix provide a method to install SIGCHLD handler, independent of
>the
> general reactor.run() signal handlers. ... maybe related to #5710
>
>* Allow passing Unicode environment (at least on Windows) maybe needed
>for Python3 #5968
>
>* Allow passing Unicode command and arguments on Windows (current not
>supported by pywin32 CreateProcess) #6470... maybe needed for Python3
>#5968
>
>* Improve fork/exec for speed and memory usage #5710 .... maybe by
>creating
> a auxiliary process which handles forks and child management.
>
>* Execute as a different account in Windows
>
>* Spawn only after reactor starts ? I am ok with forking before.
>
>* Support client endpoint?
>
>-------
>
>For a new design:
>
>* I like the ProcessProtocol API
I don't. :) ProcessProtocol means you can't re-use any of your existing
IProtocol implementations. Oops.
It seems like a better API would let you say "Here is a protocol, hook
its output up to fd 0 in the process, hook fd 1 in the process up to its
input. Here is another protocol, hook fd 2 in the process up to its
input" (this would probably be a common configuration - "speak some
regular protocol over stdin/stdout, have a little special logic
(probably logging) for stderr).
On the other hand, it's possible to build this on top of ProcessProtocol
and no one ever has...
>* spawnProcess will always return a deferred... for backward
>compatibility
> we need to decide a name for this new method which returns a deferred.
> Maybe createProcess or connectProcess
>
>* create spawnUnixProcess which has childFDs uid/gid
>
>* create spawnWindowsProcess which has Windows specific options
>
>* createProcess / connectProcess will call spawnUnixProcess or
>spawnWindowsProcess
> depending on current OS
>
>* ProcessProtocol.processEnded is similar to connectionLost..
> so maybe it can be rename it and add other methods so that
>IProcessProtocol
> can inherit from IProtocol. I guess that this will help with
>connectors.
Let's not introduce new cases where inheritance is encouraged.
>------
>
>I think that child management problem, does not affect the public API
>so I am
>not discussing it here.
>
>Timeouts are handled at protocol level and I see that we have 2 timeout
>types:
>total execution time and timeout after last child data was received.
>
>-----
>
>Does it make sense to put it on wiki or what should be the Twisted
>Enhancement Proposal process?
I think it's easier to maintain a document on the wiki than in threads
on the mailing list.
>Can I get 'create page' rights on Trac?
Hm. I thought everyone had wiki edit rights (except for a small number
of privileged pages) by default - so I'm not sure what's going on here
or how to give you permissions. Perhaps something changed in the trac
upgrade or as part of the recent ticket permission reconfiguration.
Jean-Paul
More information about the Twisted-Python
mailing list