首页 > 解决方案 > python grpc客户端如何管理连接?

问题描述

grpc 客户端何时创建和关闭连接?
我开始代码:

channel = grpc.insecure_channel('localhost:8888')
stub = myservice_pb2_grpc.MyServiceStub(channel)

声明 a 是否channel会在进程的整个生命周期中创建一个套接字?
因为即使我给了无效的地址,insecure_channel()在我提出第一个请求之前我也看不到任何错误。

或者,仅在发出请求并随后关闭套接字时才创建套接字?

标签: pythonsocketsconnectiongrpcgrpc-python

解决方案


在 gRPC Python 中,一个通道对象对应一个或多个 TCP 连接,具体取决于您的负载平衡策略。如果没有选择负载均衡策略(这似乎是绝大多数使用情况),那么是的,一个通道对应一个 TCP 连接。

只要通道对象本身是打开的,由通道表示的连接将保持活动状态。因此,建议您在客户端进程的许多 RPC 调用中重用通道。还建议您不再需要某个频道时将其关闭。

有两种方法可以做到这一点。第一种是手动调用close方法:

channel = grpc.insecure_channel('localhost:8888')
# send some RPCs
channel.close()

另一种是使用上下文管理器:

with grpc.insecure_channel('localhost:8888') as channel:
  # send some RPCs


推荐阅读