python - python grpc客户端如何管理连接?
问题描述
grpc 客户端何时创建和关闭连接?
我开始代码:
channel = grpc.insecure_channel('localhost:8888')
stub = myservice_pb2_grpc.MyServiceStub(channel)
声明 a 是否channel
会在进程的整个生命周期中创建一个套接字?
因为即使我给了无效的地址,insecure_channel()
在我提出第一个请求之前我也看不到任何错误。
或者,仅在发出请求并随后关闭套接字时才创建套接字?
解决方案
在 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
推荐阅读
- ios - PHPhotoLibraryPreventAutomaticLimitedAccessAlert 在显示照片库时仍显示选择照片选项
- docker - 将块存储挂载到多个运行 Docker Swarm 的 VPS 以进行共享存储是否可行?
- c++ - 运行函数后元素恢复为 0
- matlab - 八度矩阵:为什么这两个成本函数的行为不同?
- python - 无法使用 Alembic 和 SQLAlchemy 将 String(250) 的长度更改为 String
- mysql - mysql中的引导窗口函数查找销售
- amazon-ec2 - EKS集群节点组如何获取静态IP地址
- woocommerce - WooCommerce:定义和显示相关产品组
- django - 'objects'的QuerySet Manager django问题
- html - 如何推两个HTML中的块彼此更接近?