On Jun 12, 2012, at 1:53 PM, Quan Nguyen wrote:

> Hello,
> 
> I am new to Twisted. 
> I am extending the twisted Echo server example by sending the data that the 
> server receives from telnet into a child process that processes the data. The 
> function outReceived in censoringProtocol is called when the child writes the 
> result and the result is received. The process of passing data from parent to 
> child and back to parent is done by having a while loop of stdin.readline() 
> and stdout.write() in the child process. 
> Specifically, I generate a deferred object each time I write to the child 
> using the function sendData (which then calls writeToChild) and use a queue 
> to manage the deferred objects. I add a callBack (printData) that will 
> broadcast the result to all instances of Echo when outReceived is called. 
> 
> I have two questions: 
> 1/ Is this the right approach to communicate with the child process in order 
> to achieve what I want? Are there any gotcha's?

This sounds pretty much fine, except for the caveat you already asked about:

> 2/ This server will be exposed to high loads. There will be many instances of 
> Echo sending data to the child at a high rate. Are there any limitations that 
> I have to watch for, such as the limit on child process's pipe sizes or 
> anything else?

You might want to investigate the producer/consumer API, as recently blogged 
about by our marvelously productive summer intern, ashfall: 
<http://ashfall.github.com/blog/2012/05/29/twisted-producer-and-consumer-system/>.
  As currently written, even if your subprocess backs up, you will buffer data 
to it without any limits.

(The consumer you want, by the way, is censoringProtocol().transport.pipes[0], 
in case that isn't entirely clear; processes need to be documented a little 
better.)

You may have to write a little bit of tricky code to multiplex the consumer, if 
you want to have multiple "echo" client connections using the same subprocess.  
If it were a 1<->1 relationship you could just register the echo protocol's 
transport as the producer for the stdin pipe on the processing protocol, but 
spawning that many processes is probably wasteful.

-glyph
_______________________________________________
Twisted-Python mailing list
Twisted-Python@twistedmatrix.com
http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python

Reply via email to