Esempio n. 1
0
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)
Esempio n. 2
0
 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()