【发布时间】:2017-08-15 20:08:02
【问题描述】:
我有一个 go 编写的 grpc 服务器和一个 python 客户端,有时会出现以下错误:
eggs/grpcio-1.0.0-py2.7-linux-x86_64.egg/grpc/_channel.py\", line 432, in _end_unary_response_blocking\n raise _Rendezvous(state, None, None, deadline)\nInternalServerError: Deadline Exceeded\n"}
gRPC 允许客户端在调用远程时指定截止时间值 方法。这指定客户端想要等待多长时间 在 RPC 以错误结束之前来自服务器的响应 DEADLINE_EXCEEDED。在服务器端,服务器可以查询 查看特定方法是否超时的截止日期,或多少时间 剩下来完成方法。
如何指定截止日期因语言而异 - 对于 例如,在 Python 中总是需要截止日期值,而不是全部 语言有默认截止日期。
有没有办法解决这个错误?
【问题讨论】:
-
客户端和服务端都写了吗?代码看起来如何?服务器如何处理超时?客户端如何处理超时?
-
当你问“有没有办法解决这个错误?”时,你还没有提出这个错误需要解决的情况。 gRPC 告诉你 RPC 在你允许它完成的时间内没有完成 - 好吧,你希望你的代码接下来做什么?重试吗?尝试不同的 RPC?向代码的用户报告错误?另外,Python 不再总是需要截止日期。我会努力更新该文档。
-
@NathanielManistaAtGoogle 感谢您的提醒,我想我应该详细描述一下这个案例。我想知道为什么RPC无法在截止日期前完成,是消息流的大小太大还是网络问题?我可以更改截止日期吗?我没有找到任何文件来解释它。
-
使用 gRPC Python 调用 RPC 时,不传递超时值意味着“无超时”或“无限超时”。导致 RPC 超时的原因是......几乎任何你能想象到的事情,但通常客户端上的一些问题干扰了在分配的时间内正在处理的 RPC,服务器上的一些问题干扰了在分配的时间内正在处理的 RPC,或者网络上的一些问题在两者之间交换字节。你能控制你的服务器吗?您是否观察到您的服务器及时完成了 RPC?
标签: python go protocol-buffers rpc grpc