问题标签 [grpc-python]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
5012 浏览

python - 跟踪 grpc 服务器上的多个客户端

我正在尝试创建一个grpc可以跟踪所有连接的客户端的 python 服务器。

我指的是 Ray Tsang 所做的一个谈话/演示,他保存了一个集合StreamObservers并只是迭代它们以发送给所有客户。这是一个视频供参考。

现在我的问题是你如何StreamObserver在 python 中得到一个?我只看到self,request并且context在定义中对我可用。

这是我的第一个 python 项目,所以我可能在这里遗漏了一些明显的东西。

这是我的原型,它基本上是示例原型

0 投票
0 回答
329 浏览

python - Python grpcio 最佳编程实践

有一个话题在谈论最佳实践

https://github.com/grpc/grpc-go/issues/682

但我最后不确定,如何在我的程序中使用 grpcio。

我正在使用基于 GRPC 的 tensorflow-serving。我的客户端基于 python sdk grpcio-1.8.3。客户端程序是一个具有许多 API 的 Flask 服务器,每个 API 都拥有相同的通道和存根。

当 tensorflow-serving(GRPC 服务器)重新启动时,客户端程序将失败为“Endpoint read failed”并且不再恢复。

但是当我将 grpcio 升级到较新版本时,该错误似乎已修复,因此客户端可以自动重新连接。

如果 grpcio 客户端,即 Flask 服务器全局拥有一个通道和存根,则该错误似乎永远不会出现。

但是我仍然不确定使用 grpcio 之类的 grpc 客户端 SDK 进行编程的最佳方式是什么,稳定且高性能。因为这些示例甚至都没有异常测试,更不用说如何在一个进程中使用多个通道和存根。

0 投票
1 回答
2229 浏览

python - 如何在安全的 Nginx 上修复“从上游读取响应标头时上游过早关闭的连接”

我配置我的 nginx:

我想为 SSL grpc 服务器配置安全的 nginx L7 负载平衡。在非安全 grpc 服务器上,非安全 nginx 运行良好。但是在安全时我得到了一个错误:

我试图找到解决此问题的方法,但没有适合我的方法。

0 投票
0 回答
1063 浏览

java - grpc 异步双向服务器(Java/Python)

这是我的场景。grpc 服务器是一个从其他源订阅数据的异步服务器。它还向其客户端提供了订阅功能,因此一旦从其他来源接收到数据,它就可以将数据推送到 grpc 客户端。服务器是用 Java 实现的。

我想使用 python 来实现一个 grpc 客户端来订阅这个服务器。但是,一旦python订阅数据就显得很奇怪,它立即关闭而不等待Java服务器的异步返回。但是,Java 客户端可以永远运行并等待来自服务器的异步数据。

原型

Python 客户端代码(不工作)

Java 代码(工作)

我一直很困惑。如何在 python 客户端中实现相同的功能?谢谢~

ps 如果服务器是非异步服务器的while True 服务器,则python 客户端工作。我怀疑python客户端不知道“异步”服务器,一旦它的流没有新数据,它就会关闭连接。

0 投票
1 回答
1593 浏览

protocol-buffers - grpc 错误 ...找不到记录器“grpc._common”的处理程序

我刚刚掌握了 grpc 并尝试构建一个自定义客户端-服务器过程,其中客户端发送一个 id 和一个与 id 对应的名称。

这是 custom.proto 文件:

从此原型文件 custom_pb2 和 custom_pb2_grpc.py 生成。

这是 custom_db.json

这是 custom_resources.py

这是 custom_server.py

这是 custom_client.py

我得到的确切错误消息是:

谢谢您的帮助。

0 投票
2 回答
4422 浏览

python - 从 GRPC Python 服务器发回文件流

我有一项服务需要将文件流返回给调用客户端,所以我创建了这个 proto 文件。

当服务器接收到这个时,它需要读取一些 source.txt 文件,然后将其作为字节流写回客户端。只是想问一下这是在 Python GRPC 服务器中执行此操作的正确方法吗?

我找不到与此相关的任何示例。

0 投票
1 回答
251 浏览

protocol-buffers - 从 pubref/rules_protobuf 在 py_proto_compile 中使用导入失败:_pb2.py 和 pb2_grpc.py 未创建

我们有 3 个相互依赖的 proto 文件,它们位于//protocol/proto包中。基本上:

在里面A.proto,我们声明了,imports B.proto和,没有文件名imports C.proto的前缀。protocol/path

对于 Java 代码编译(in //protocol/BUILD),我们使用imports如下,并且该规则完美运行。

但是,当我尝试对 Python 代码编译(也在 中//protocol/BUILD)执行相同操作时,它不起作用:

bazel build //protocol:client-python-proto返回以下错误:

导入导入的 proto 文件的完整路径(例如import protocol/proto/A.proto)可以解决这个问题,但对我们来说重要的是我们不添加完整路径作为前缀。因此,我们试图使imports论点起作用。

您知道可能是什么原因以及我们如何解决这个问题吗?

0 投票
3 回答
2186 浏览

python - 如何在 gRPC python 中定义全局错误处理程序

我试图捕获任何服务程序中引发的任何异常,因此我可以确保我只传播已知异常而不是像 ValueError、TypeError 等意外的异常。

我希望能够捕获任何引发的错误,并将它们格式化或将它们转换为其他错误,以更好地控制暴露的信息。

我不想用 try/except 封装每个服务方法。

我尝试过使用拦截器,但我无法捕捉到那里的错误。

有没有办法为 grpc 服务器指定错误处理程序?就像你对烧瓶或任何其他 http 服务器所做的那样?

0 投票
1 回答
609 浏览

python-3.x - python3 - 装饰器函数:赋值前引用的变量

我正在开发一个gRPC微服务。

因为每个方法都必须request首先从参数中加载一个 JSON 字符串——然后最后再次转储它,我想在类的方法上使用装饰器,以便方法本身除了return只包含... more stuff to do ...以下内容:

所以我写了一个装饰器函数。但是,我找不到此错误的解决方案:

请求 = json.loads(request.context)

UnboundLocalError:分配前引用的局部变量“请求”

错误是由此产生的:(仅作为示例,真实的东西要复杂一些)

我尝试request = json.loads(args[1].context)改用。但后来我得到这个错误:

if request["source_machine"] 和 request["dest_machine"]: TypeError:

“JsonContextRequest”对象不可下标

作为request参数给出的输入是类型的对象。<class 'SetupService_pb2.JsonContextRequest'>请求中的 JSON 字符串可以通过request.context属性访问。

我认为问题与如何调用装饰器函数有关。我想如果它是在类方法的运行时调用的,那么变量 request 应该已经被分配了 request 对象。

但也许我在这里完全错了。那么你将如何解决这个问题?

0 投票
1 回答
7659 浏览

python - 以 (StatusCode.UNAVAILABLE, Socket closed)> 终止的 RPC 集合

  • 张量流GPU 1.10.0
  • 张量流服务器 1.10.0

我已经部署了一个服务于多个模型的 tensorflow 服务器。客户端代码是这样client.py的,我调用了预测函数。

我有大约 100 个具有相同配置的客户端。这是调用该predict函数的示例代码:

起初,当我运行客户端代码时,我可以正确收到响应。但几个小时后,客户端因错误而崩溃

我尝试将我的客户端代码修改为

这意味着每次predict调用该函数时,我都会尝试与 tfs 服务器建立连接。但是这段代码也像以前一样失败了。

那么我应该如何处理这种情况呢?