[Twisted-Python] IPushProducer - medium volume streaming

Rutt, Benjamin Benjamin.Rutt at gs.com
Mon Oct 29 13:10:15 EDT 2007

Thanks Chris and Phil.  My mistake for writing



'reactor.callFromThread(self.transport.writeSomeData, ...)' 

the latter which I'm actually using.

Also I fixed to use write() not writeSomeData(), thanks.

Regarding state, I take it each new client connection to my server
results in a new instance of my LineReceiver subclass.  So therefore the
self.transport object contains the TCP socket fd in there somewhere -
makes sense, thanks.

-----Original Message-----
From: twisted-python-bounces at twistedmatrix.com
[mailto:twisted-python-bounces at twistedmatrix.com] On Behalf Of
Christopher Armstrong
Sent: Monday, October 29, 2007 10:57 AM
To: Twisted general discussion
Subject: Re: [Twisted-Python] IPushProducer - medium volume streaming

On 10/29/07, Rutt, Benjamin <Benjamin.Rutt at gs.com> wrote:
> I'm still puzzled how exactly
> 'reactor.callFromThread(self.transport.writeSomeData(...))' gets
> to the right client when called from my function.  How does twisted
> which client that message is going to?  After all, it calls it from
> main reactor loop.  i.e. what state does it use to get this right?

"self.transport" is associated with the particular connection.

Also, there are a couple of other things wrong about your snippet:

1. use "write", not "writeSomeData". writeSomeData is an internal
implementation detail.

2. You're actually calling writeSomeData and passing the *result* of
that to callFromThread. That's wrong; you need to pass a callable and
its arguments to callFromThread. So instead of
reactor.callFromThread(foo(a, b)), you write
reactor.callFromThread(foo, a, b). That means you should ultimately be

reactor.callFromThread(self.transport.write, data)

Christopher Armstrong
International Man of Twistery

Twisted-Python mailing list
Twisted-Python at twistedmatrix.com

More information about the Twisted-Python mailing list