[Twisted-Python] transport.write clarification
Hello, I'm working on porting the mod_pubsub system to use the twisted framework. So far things are great, but I have one point of clarificaction. With all the standard reactors, how are writes handled in a non-blocking manner? Copying from some of the sample protocols, I have a dataReceived method in my Protocol implementation that looks vaguely like this: def dataReceived(self, data): self.inbuf += data if self.canReply() == true: self.transport.write(self.response) My question is: does write() make a non-blocking write, and if so does it reschedule itself later on automatically? Does it block? What is the preferred way of handling this? Thanks, George
On Sat, 2004-07-31 at 15:55, George Schlossnagle wrote:
My question is: does write() make a non-blocking write, and if so does it reschedule itself later on automatically? Does it block? What is the preferred way of handling this?
It doesn't block, and if it can't write it buffers for you. You just don't have to worry about it. -- Itamar Shtull-Trauring http://itamarst.org
On Jul 31, 2004, at 3:55 PM, George Schlossnagle wrote:
I'm working on porting the mod_pubsub system to use the twisted framework. So far things are great, but I have one point of clarificaction. With all the standard reactors, how are writes handled in a non-blocking manner? Copying from some of the sample protocols, I have a dataReceived method in my Protocol implementation that looks vaguely like this:
def dataReceived(self, data): self.inbuf += data if self.canReply() == true: self.transport.write(self.response)
My question is: does write() make a non-blocking write, and if so does it reschedule itself later on automatically? Does it block? What is the preferred way of handling this?
It makes non-blocking writes until all of the data available is written. It uses a buffer. -bob
On Jul 31, 2004, at 5:03 PM, Bob Ippolito wrote:
On Jul 31, 2004, at 3:55 PM, George Schlossnagle wrote:
I'm working on porting the mod_pubsub system to use the twisted framework. So far things are great, but I have one point of clarificaction. With all the standard reactors, how are writes handled in a non-blocking manner? Copying from some of the sample protocols, I have a dataReceived method in my Protocol implementation that looks vaguely like this:
def dataReceived(self, data): self.inbuf += data if self.canReply() == true: self.transport.write(self.response)
My question is: does write() make a non-blocking write, and if so does it reschedule itself later on automatically? Does it block? What is the preferred way of handling this?
It makes non-blocking writes until all of the data available is written. It uses a buffer.
Super, thanks. George
participants (3)
-
Bob Ippolito
-
George Schlossnagle
-
Itamar Shtull-Trauring