[Twisted-Python] Understanding the IOCP reactor and adding spawnProcess

Justin Johnson justinjohnson at gmail.com
Mon Jul 11 15:40:44 EDT 2005

On 7/11/05, Jp Calderone <exarkun at divmod.com> wrote: 
> On Mon, 11 Jul 2005 12:16:35 -0500, Justin Johnson <
> justinjohnson at gmail.com> wrote:
> >On 7/11/05, Jp Calderone <exarkun at divmod.com> wrote:
> >>
> > [snip]
> >
> >> 3. Notify the ProcessProtocol via protocol.makeConnection (not sure
> >> > why, looking at win32eventreactor)
> >>
> >> makeConnection is the method that's actually part of IProtocol (even
> >> though ProcessProtocol doesn't implement IProtocol, it still adheres to 
> its
> >> API in this regard). Generally, all it does is set the .transport 
> attribute
> >> on the protocol instance and then call connectionMade. This might seem
> >> pointless in the case of processes, but since it maintains consistency 
> with
> >> other kinds of transports, it is useful.
> >
> > So the Process class is the transport? In win32eventreactor, 3 threads 
> are
> >started that loop on reading stdout and stderr and writing data from the
> >outQueue to stdin. It seems to me that I would not use these threads, but
> >instead have each of these 3 file handles associated with the IOCP. Then 
> the
> >methods defined in ops.py would be used to handle events on those 
> handles,
> >resulting in transport methods being called. These transport methods 
> would
> >be methods on the Process class, which would result in methods on a 
> single
> >instance of the ProcessProtocol being called. This single instance of the
> >ProcessProtocol would be shared by all of the 3 file handles. Am I
> >understanding correctly? Are write and loseConnection the only methods 
> the
> >Process would need to implement from ITransport?
> That mostly sounds correct, except the last bit. What makes it a transport 
> is that it implements /all/ of ITransport. Moreover, ProcessProtocols expect 
> their transport to be an IProcessTransport, which adds several methods on 
> top of ITransport. Everything in each of those interfaces needs to be 
> implemented.

 Ahh... I missed those interfaces because I was starting with 
win32eventreactor.Process, which doesn't implement either ITransport or 
IProcessTransport (either with an implements() or by defining all of those 
 After some more thought about this I think I will have to define new xxxOps 
methods for stdout and stderr (and maybe stdin as well). These ops' ovDone 
methods will call the methods on the transport (Process) appropriate for 

For reference, <
> http://twistedmatrix.com/documents/current/api/twisted.internet.interfaces.ITransport.html> 
> and <
> http://twistedmatrix.com/documents/current/api/twisted.internet.interfaces.IProcessTransport.html
> >.
> Jp
> _______________________________________________
> Twisted-Python mailing list
> Twisted-Python at twistedmatrix.com
> http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://twistedmatrix.com/pipermail/twisted-python/attachments/20050711/c7f93eaf/attachment.htm 

More information about the Twisted-Python mailing list