[Twisted-Python] does setTcpNoDelay() not work?
Jean-Paul Calderone
exarkun at divmod.com
Mon Aug 11 11:30:04 MDT 2008
On Mon, 11 Aug 2008 19:13:56 +0200, Gabriel Rossetti <gabriel.rossetti at arimaz.com> wrote:
>Gabriel Rossetti wrote:
>>Hello,
>>
>>I'm needing to send small packets to update a progress bar. My update msgs
>>were all being sent in big packets, so I tried setting setTcpNoDelay() in
>>connectionMade() but it doesn't change anything, is it broken?
>>
>>Thank you,
>>Gabriel
>I an using code that I wrote using threads.deferToThread(), I wondered if it
>was blocking the reactor maybe, so I tried just using a plain
>deferToThread() call. Here's the code (without all the protocol stuff, it's
>executed when data come in.
>
> def loop(self):
> import time
> m = utils.createMessage("toto", "hello")
> while(True):
> print "Sending %s" % m.toXml()
> self.sendMessage(m)
> print "Sent!"
> time.sleep(2)
>
>
>threads.deferToThread(self.loop)
>
>the TCP no delay option is turned on like I said before, the weird thing is
>that I have the same thing, all my msgs get sent in big blocks. Either the
>TCP no delay doesn't work, or the reactor is getting tied up. I don' t get
>it since I'm running the blocking code in a thread, the reactor should have
>nothing to do.
>
Since you didn't include the definition of `sendMessage´, it's hard to say
what's really going on here. However, my guess is that you're calling the
transport.write method in a non-reactor thread, which is not allowed.
If this isn't the case, including a full, minimal example in your next
message would be a good idea. :)
Jean-Paul
More information about the Twisted-Python
mailing list