class MyServer(): SUCCESS = 123 REPLY_PORT = 4010 RUNNING_MESSAGE = 'imrunning' TIME_TO_EXECUTE = 2 def __init__(self, timeModule=time): logging.basicConfig(level=logging.DEBUG, format='%(asctime)s %(message)s') self._zmq = ZmqRemoteProcedureCall() self._replySocket = self._zmq.replySocket(self.REPLY_PORT) self._timeMod = timeModule self._isTerminated = False self._logger = Logger.of('MyServer') self.loop() def loop(self): self._logger.notice("%s" % self.RUNNING_MESSAGE) while not self._isTerminated: self._logger.notice('looping') self._zmq.handleRequest(self, self._replySocket, multi=False) self._timeMod.sleep(0.1) self._logger.notice("Terminating") def returnSuccessAfter2Seconds(self): self._logger.notice('invoked returnSuccessAfter2Seconds') self._timeMod.sleep(self.TIME_TO_EXECUTE) return self.SUCCESS def raiseAnException(self): self._logger.notice('invoked raiseAnException') raise MyException('wanted Exception') def getSomethingWithALogger(self, value): return HasALogger(value) @staticmethod def startUpServer(): MyServer() @staticmethod def commandToSpawn(): cmd= 'python -c "from %s import MyServer; '\ 'MyServer.startUpServer()"' % MyServer.__module__ return cmd
class MyPublisher(): REPLY_PORT = 4011 PUBLISHER_PORT = 4012 RUNNING_MESSAGE = 'imrunning' CYCLE_PERIOD = 0.01 def __init__(self, timeModule=time): logging.basicConfig(level=logging.DEBUG, format='%(asctime)s %(message)s') self._zmq = ZmqRemoteProcedureCall() self._replySocket = self._zmq.replySocket(self.REPLY_PORT) self._publisherSocket = self._zmq.publisherSocket(self.PUBLISHER_PORT) self._counter = 0 self._timeMod = timeModule self._isTerminated = False self._logger = Logger.of('MyPublisher') self.loop() def loop(self): self._logger.notice("%s" % self.RUNNING_MESSAGE) while not self._isTerminated: self._logger.notice('looping counter %d' % self._counter) self._zmq.handleRequest(self, self._replySocket, multi=False) anObject = MyObject(self._counter) self._zmq.publishPickable(self._publisherSocket, anObject) self._counter += 1 self._timeMod.sleep(self.CYCLE_PERIOD) self._logger.notice("Terminating") def getLastCounter(self): return self._counter @staticmethod def startUp(): MyPublisher() @staticmethod def commandToSpawn(): cmd= 'python -c "from %s import MyPublisher; '\ 'MyPublisher.startUp()"' % MyServer.__module__ return cmd