如何在 gRPC Python 中发送服务器流的初始元数据
How to send initial metadata for a server stream in gRPC Python
我有一个提供服务器流式 RPC 的 gRPC 服务器。但是,在调用 RPC 时,我想将一些元数据从客户端发送到服务器。我发现您可以将 with_call
用于非流式 RPC(请参阅 the metadata example on GitHub)。
这显然不适用于流式 RPC(你会得到一个 AttributeError: '_UnaryStreamMultiCallable' object has no attribute 'with_call'
)。
所以,我的问题是,如何将元数据与服务器流式 RPC 从客户端发送到服务器?由于服务器可以检索调用元数据,因此也必须有一种方法可以从客户端发送它。
好的,所以我发现了如何使用服务器流式 RPC 发送元数据。您唯一需要做的就是添加元组的元组作为 metadata
关键字参数的参数,如下所示:
stub.MyServerStreamingRPC(
_pb2.MyServerStreamingRequest(),
metadata=(('metadata-identifier', 'metadata-value'),)
# ^
)
如果您像我一样只使用一个元数据对,那么这里重要的是第一个内部元组之后的逗号。如果您忘记了这一点,metadata
参数的参数将不会被识别为元组,您将得到一个 ValueError: too many values to unpack (expected 2)
.
当我第一次尝试简单地传递额外的 metadata
参数时,我确实忘记了这一点,这让我相信它并不像我想象的那么简单。但是,事实证明,如果您知道如何正确使用 Python :D
我有一个提供服务器流式 RPC 的 gRPC 服务器。但是,在调用 RPC 时,我想将一些元数据从客户端发送到服务器。我发现您可以将 with_call
用于非流式 RPC(请参阅 the metadata example on GitHub)。
这显然不适用于流式 RPC(你会得到一个 AttributeError: '_UnaryStreamMultiCallable' object has no attribute 'with_call'
)。
所以,我的问题是,如何将元数据与服务器流式 RPC 从客户端发送到服务器?由于服务器可以检索调用元数据,因此也必须有一种方法可以从客户端发送它。
好的,所以我发现了如何使用服务器流式 RPC 发送元数据。您唯一需要做的就是添加元组的元组作为 metadata
关键字参数的参数,如下所示:
stub.MyServerStreamingRPC(
_pb2.MyServerStreamingRequest(),
metadata=(('metadata-identifier', 'metadata-value'),)
# ^
)
如果您像我一样只使用一个元数据对,那么这里重要的是第一个内部元组之后的逗号。如果您忘记了这一点,metadata
参数的参数将不会被识别为元组,您将得到一个 ValueError: too many values to unpack (expected 2)
.
当我第一次尝试简单地传递额外的 metadata
参数时,我确实忘记了这一点,这让我相信它并不像我想象的那么简单。但是,事实证明,如果您知道如何正确使用 Python :D