Example #1
0
class RpcClient(object):

    tcp_channel_class = TcpChannel

    def __init__(self, pool_size=1000):
        self._channels = {}
        self._pool = Pool(pool_size)

    def __del__(self):
        self.close()

    def close(self):
        for channel in self._channels.itervalues():
            channel.close()
        self._channels.clear()

        self._pool.join()

    def get_tcp_channel(self, addr, is_wait_connected=True):
        if isinstance(addr, list):
            addr = tuple(addr)
        if addr not in self._channels:
            # if TcpConnection connects for a long time, and
            # other client use get_tcp_channel may cause problem.
            channel = RpcClient.tcp_channel_class(addr, spawn=self._pool.spawn)
            self._channels[addr] = channel

            # connect asynchronously
            self._pool.spawn(channel.connect)
        else:
            channel = self._channels[addr]
            if not channel.is_connected():
                self._pool.spawn(channel.connect)

        if is_wait_connected:
            channel.wait_until_connected()

        return channel
Example #2
0
 def __init__(self, pool_size=1000):
     self._channels = {}
     self._pool = Pool(pool_size)