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._rpclient.connect('tcp://{host}:{port}'.format(host=self.host, port=self.port)) self._ioloop = IOLoop.instance()
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._rpclient.connect('tcp://{host}:{port}'.format(host=self.host, port=self.port)) self._ioloop = IOLoop.instance() def deploy(self): if not self._ioloop.is_running(): with self._lock: if not self._ioloop.is_running(): threading.Thread( target=lambda: IOLoop.instance().start()).start() 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) self._supervisor = None if self._deployed: self._ioloop.remove_handler(self._rpclient) self._rpclient = None def __getattr__(self, klass): return AsyncClientIllusion(self._rpclient, klass)
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._rpclient.connect('tcp://{host}:{port}'.format(host=self.host, port=self.port)) self._ioloop = IOLoop.instance() def deploy(self): if not self._ioloop.is_running(): with self._lock: if not self._ioloop.is_running(): threading.Thread(target=lambda: IOLoop.instance().start()).start() 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) self._supervisor = None if self._deployed: self._ioloop.remove_handler(self._rpclient) self._rpclient = None def __getattr__(self, klass): return AsyncClientIllusion(self._rpclient, klass)