Python Thrift客户端传输的正确生命周期

Python Thrift客户端传输的正确生命周期,python,thrift,thrift-protocol,Python,Thrift,Thrift Protocol,运输生命周期的最佳实践是什么 我发现每次通话打开一个传输是无效的。特别是下面的代码似乎花费了~5秒打开传输,然后每次调用~300ms用于实际的服务调用。300毫秒是可以接受的 我是否应该为每个客户端打开一次传输,并在应用程序结束时关闭?如果我这样做,我会经历短暂的网络断开吗?如果我这样做,将抛出什么客户端异常 我的客户批处理请求,这样客户就不会过于健谈。这意味着每隔30秒左右会发送1MB左右的消息。然后大约2分钟后,我将发送一条大小为15MB到50MB的大消息 def make_transpor

运输生命周期的最佳实践是什么

我发现每次通话打开一个传输是无效的。特别是下面的代码似乎花费了~5秒打开传输,然后每次调用~300ms用于实际的服务调用。300毫秒是可以接受的

我是否应该为每个客户端打开一次传输,并在应用程序结束时关闭?如果我这样做,我会经历短暂的网络断开吗?如果我这样做,将抛出什么客户端异常

我的客户批处理请求,这样客户就不会过于健谈。这意味着每隔30秒左右会发送1MB左右的消息。然后大约2分钟后,我将发送一条大小为15MB到50MB的大消息

def make_transport_context(transport_context, rpc_type):
    # Make socket
    transport = TSSLSocket.TSSLSocket(transport_context.host, transport_context.port,ca_certs=transport_context.ca_certs,validate=False)
    transport.setTimeout(ms=transport_context.timeout_in_millis)
    # Buffering is critical. Raw sockets are very slow
    transport = TTransport.TBufferedTransport(transport)
    # Wrap in a protocol
    protocol = TBinaryProtocol.TBinaryProtocol(transport)
    # Create a client to use the protocol encoder
    client = rpc_type.Client(protocol)
    return client, transport

@contextlib.contextmanager
def rpc_thrift_context(transport_context):
    client, transport = make_transport_context(transport_context,  DataRPC)
    try:
        transport.open()
        yield client
    finally:
        transport.close()