#! /usr/bin/env python import time, random import Pyro.core import Pyro.naming from Pyro.errors import * from threading import Thread import bouncer2 abort=0 def PyroLoop(daemon): global abort print 'Pyro daemon loop thread is running.' daemon.requestLoop(lambda: not abort) print 'Pyro daemon loop thread is exiting.' def main(): global abort Pyro.core.initServer() Pyro.core.initClient() daemon = Pyro.core.Daemon() NS = Pyro.naming.NameServerLocator().getNS() daemon.useNameServer(NS) server = NS.resolve(':test.bouncer2').getProxy() bounceObj = bouncer2.Bouncer("Client") daemon.connect(bounceObj) # callback object # register callback obj on server server.register(bounceObj.getProxy()) # register server as 'callback' on own object bounceObj.register(server) # create a thread that handles callback requests thread=Thread(target=PyroLoop, args=(daemon,)) thread.start() print 'This bounce example will deadlock!' print 'Read the manual or Readme.txt for more info why this is the case!' print 'Calling server...' result = server.process(["hello"]) print 'Result=',result abort=1 thread.join() print 'Exiting.' if __name__=='__main__': main()