class AsyncServerProxy(object): def __init__(self, host, port, configs={}): self.host = host self.port = port self.configs = configs self._deployed = False self._monitored = False self._lock = threading.Lock() self._rpclient = AsyncRPCClient() self._supervisor = Supervisor() self.event = zmq.EVENT_CONNECTED | zmq.EVENT_DISCONNECTED for config, value in self.configs.iteritems(): self._rpclient.sock().setsockopt(config, value) self._ioloop = IOLoop.instance() if not self._ioloop.is_running(): with self._lock: if not self._ioloop.is_running(): threading.Thread(target=lambda: IOLoop.instance().start()).start() def deploy(self): self._rpclient.connect('tcp://{host}:{port}'.format(host=self.host, port=self.port)) self._deployed = True def monitor(self, prot, available_cb, unavailable_cb): assert not self._deployed with self._lock: assert not self._deployed self._rpclient.sock().monitor('inproc://{prot}.mo'.format(prot=prot), self.event) self._supervisor.connect(prot) if available_cb: self._supervisor.available_cb = available_cb if unavailable_cb: self._supervisor.unavailable_cb = unavailable_cb self._monitored = True def quit(self): if self._monitored: self._ioloop.remove_handler(self._supervisor) del self._supervisor if self._deployed: self._ioloop.remove_handler(self._rpclient) del self._rpclient del self def __getattr__(self, klass): return AsyncClientIllusion(self._rpclient, klass)
def __init__(self, host, port, configs={}): self.host = host self.port = port self.configs = configs self._deployed = False self._monitored = False self._lock = threading.Lock() self._rpclient = AsyncRPCClient() self._supervisor = Supervisor() self.event = zmq.EVENT_CONNECTED | zmq.EVENT_DISCONNECTED for config, value in self.configs.iteritems(): self._rpclient.sock().setsockopt(config, value) self._ioloop = IOLoop.instance() if not self._ioloop.is_running(): with self._lock: if not self._ioloop.is_running(): threading.Thread(target=lambda: IOLoop.instance().start()).start()