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
def __init__(self, pool_size=1000): self._channels = {} self._pool = Pool(pool_size)