[Twisted-Python] help w/simple echo example w/deferred and threads

john nielsen jn at who.net
Fri Apr 2 14:11:16 MST 2004


I am trying to make a very simple echo server use threads to understand how twisted handles blocking code.  I think I have the server ok but I am not sure how to have the client grab the data from a thread that finished some time later. If I comment out the sleep call, everything works fine. I looked at deferred but am a little confused. What is the simple code the client missing?

Thanks for any help,

john

Here is the server
###############
from twisted.spread import pb
from twisted.internet import reactor
from twisted.python import threadable
threadable.init()
import time,random

class t:
    def __init__(self):
        self.result=''
    def test(self,st='same'):
        time.sleep(1)
        print 'done sleeping'
        self.result=st+':'+str(time.time())
    
class Echoer(pb.Root):
    def __init__(self):
        self.a=t()
    def remote_echo(self, st):
            reactor.callInThread(self.a.test,st)
            print 'from thread',self.a.result
            return self.a.result

if __name__ == '__main__':
    reactor.listenTCP(8789, pb.PBServerFactory(Echoer()))
    reactor.run()

#Here is the client
from twisted.spread import pb
from twisted.internet import reactor, defer
from twisted.python import util

factory = pb.PBClientFactory()
reactor.connectTCP("localhost", 8789, factory)
d = factory.getRootObject()
d.addCallback(lambda object: object.callRemote("echo", "hello network"))
d.addCallback(lambda echo: 'server echoed: '+echo)
d.addErrback(lambda reason: 'error: '+str(reason.value))
d.addCallback(util.println)
d = factory.getRootObject()
d.addCallback(lambda object: object.callRemote("echo", "hello network"))
d.addCallback(lambda echo: 'server echoed: '+echo)
d.addErrback(lambda reason: 'error: '+str(reason.value))
d.addCallback(util.println)
d.addCallback(lambda _: reactor.stop())

-- 
_______________________________________________
Get your free email from http://www.iname.com





More information about the Twisted-Python mailing list