问题标签 [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 投票
1 回答
4185 浏览

python - 在 grpc python 中处理异步流请求

我正在尝试了解如何使用双向流处理 grpc api(使用 Python API)。

假设我有以下简单的服务器定义:

假设将从客户端发送的消息异步发送(作为用户选择某些 ui 元素的结果)。

为客户端生成的 python 存根将包含一个方法,该方法Translate将接受一个生成器函数并返回一个迭代器。

我不清楚的是我将如何编写生成器函数来返回用户创建的消息。在等待消息时睡在线程上听起来不是最好的解决方案。

0 投票
2 回答
623 浏览

python-3.x - 子类化消息以添加其他行为

不知道为什么这不起作用,我想子类化消息并添加其他行为:

当有人更改 pb2.Status 消息时,我希望调用 send_update。这是我收到的无用错误消息:

0 投票
1 回答
3232 浏览

python - 如何从 grpc-gateway 后面的 python 服务发送具有非正常状态的响应消息?

我正在 python 中的 grpc-gateway 后面编写一个 grpc 服务,如果某些用户的请求过多,我想提出 429 响应并在响应消息正文中提供验证码。

实际上我的问题是当我使用下面的代码块来提高状态码 429 时,之后我无法发送响应消息。

据我了解,唯一的 grpc 是不可能的,但我认为第三方可能有可能。

有什么解决办法吗?

0 投票
1 回答
251 浏览

grpc - gRPC python的级联超时传播

我想知道grpc-python是否支持初始客户端超时的级联传播?

我是说:

  1. 客户端对 server-1 执行 gRPC,超时 = 200 ms
  2. server-1 花费110 ms 处理任务并调用 server-2 进行下一步
  3. server-2 处理任务耗时100 ms,下一步需要调用 server-3

使用超时传播,从服务器 2 调用服务器 3 是没有意义的,因为总花费的时间已经大于最初设置的客户端超时时间(110 毫秒 + 100 毫秒 > 200 毫秒)。

grpc-python 是否支持这样的场景?还是应该手动实施和控制?

谢谢你。

0 投票
0 回答
309 浏览

grpc - 在进行异步调用时如何依赖 gRPC 的流控制功能?

Python gRPC 客户端是否有可能以服务器可以服务它们的速度对服务器进行简单的一元调用(即不是流式调用),但如果异步请求由于返回而无法写入客户端的传出连接,则阻塞压力?

关于 gRPC 实现的流控制特性的文档很少。

简单地创建呼叫未来似乎永远不会阻塞。

0 投票
1 回答
1422 浏览

python - Python gRPC从客户端取消一元流调用

使用 Python gRPC,我希望能够在threading.Event设置 a 时从客户端取消长时间运行的一元流调用。

目前我正在使用该channel.close()方法取消流,但这当然会关闭所有连接而不仅仅是这个流。

有人可以建议我如何使用该事件来取消流迭代器吗?谢谢

0 投票
1 回答
2888 浏览

python - grpc-Python max_workers 限制同时进程的数量

在使用 python grpc 服务器时,

server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))

这是 grpc 服务器实例化的一般方式。但是在这个运行中,如果我尝试运行超过 10 个 client 实例,它期望服务器流式传输,第 11 个实例不起作用(我正在运行 10 个连接到该服务器并获取流的 client 实例)

即使我将 max_workers 更改为 None,它创建的最大线程数是 40 个线程(根据文档,8 个内核 x 5),因此在这种情况下最多可以同时为 40 个客户端提供服务。
这是预期的行为吗?

我正在处理我的代码,但尝试使用此处记录的通用 grpc python 代码:

https://grpc.io/docs/tutorials/basic/python.html

我可以用这个重现同样的问题。

要重现它,只需route_guide_server.py在 max_workers= 4 的一个窗口中运行,然后尝试在不同的窗口中运行 4-5 个不同的客户端。第 4 个客户必须等到其中一个客户完成。(为了获得更好的视图,在 yield 中添加 time.sleep)

如果大量客户端(100 和 1000 多个客户端)想通过流(应该是连续的)访问 python 中的 grpc 服务器,那么客户端将永远没有机会。

0 投票
1 回答
51 浏览

google-cloud-platform - 对 Google Cloud Function 安装/设置执行操作

我正在编写一个处理包含 grpc 消息的发布/订阅消息的云函数。我希望在安装/(重新)部署时,云函数执行一些操作:从某个 GitHub 存储库中提取 protobuf 定义,并使用 grpcio-tools 生成相应的 python 代码,大致在this的同一行中。

到目前为止,我只能在文档中找到如何添加依赖项,但是我正在寻找某种安装“钩子”:允许我在实际部署函数之前执行一些操作的东西。

这可能吗?有什么建议吗?

0 投票
1 回答
1069 浏览

protocol-buffers - 父目录中的“Protoc”命令在 python_out 目录中输出整个源目录

我有一个名为的目录protos,其中包含一个.proto文件,但最终会包含许多文件。该目录有一个名为 的同级目录app,我想在其中转储构建的grpcpython 文件。

我正在尝试编写一个简单的 bash 脚本,它将调用protoc命令并在其中构建.proto文件protos,并将构建的文件输出到app

下面是tree我放置每个文件的位置。

当我运行时build_protos.sh,该文件TrainingService.proto被检测到并构建,但不是将构建文件放入...trainingInstance/app/<file>,而是将其放入...trainingInstance/app/trainingInstance/protos/<file>(见上文)。

我以为我已经通过明确设置proto_pathto解决了这个问题protos,但它似乎并不关心任何一种方式。下面是我的build_protos.sh文件:

那么有谁知道如何阻止 protoc 在输出目录中创建这些反射目录?任何帮助表示赞赏。

0 投票
1 回答
1757 浏览

python - python grpc截止日期超过了很大百分比的错误

我在python grpc客户端调用scala grpc服务器时遇到了很多超出期限的错误。

我正在报告来自客户端和服务器的指标,并且服务器报告的时间与客户端报告的时间之间存在很大差异,我认为这不能仅用网络延迟来解释(因为差异很大)。返回的对象大小相似,我认为序列化时间与网络时间相比可以忽略不计。

我已将超时设置为 20 毫秒

我的客户端代码很简单:

我的服务器代码平均报告 5 毫秒,客户端代码7ms平均报告,但如前所述,在 20% 超时20ms

有没有办法调试这个问题的根本原因,即较低级别的日志记录等?