首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >带有迭代器请求的gRPC python上的数据流,但得到“异常迭代请求!”

带有迭代器请求的gRPC python上的数据流,但得到“异常迭代请求!”
EN

Stack Overflow用户
提问于 2021-12-21 10:25:40
回答 2查看 1.4K关注 0票数 1

我试图使用gRPC python进行双向流通信,但是客户端请求中存在一些问题.

这是我的心得:

代码语言:javascript
运行
复制
service ABC {
    rpc DataTransmission (stream DataTransmissionRequest) returns (stream DataTransmissionResponse);
}

message DataTransmissionRequest {
    bytes data = 1;
    string ticket = 2;
}

message DataTransmissionResponse {
    bytes data = 1;
}

下面是我的客户端代码,用于生成迭代器请求并调用dataTransmission函数

代码语言:javascript
运行
复制
def generateRequests():
        req_msgs = [
            (b"123", "sySJZDV9Rb8dyqt1"),
            (b"123"),
            (b"123"),
            (b"123"),
            (b"123"),
            (b"123"),
        ]
        iter = 0
        for (req, ticket) in req_msgs:
            print("(req, ticket) = ", (req, ticket))
            if iter == 0:
                request = ABC_pb2.DataTransmissionRequest(data=req, ticket=ticket)
            else:
                request = ABC_pb2.DataTransmissionRequest(data=req)
            iter += 1
            print("iter = ", iter)
            yield request

    #my_queue = queue.SimpleQueue()
    with grpc.insecure_channel(addr) as channel:
        stub = ABC_pb2_grpc.ServiceProxyStub(channel)

        data_transmission_resp = stub.DataTransmission(generateRequests())
        print("data_transmission_resp = ", data_transmission_resp)
        ##print("data_transmission_resp = ", list(data_transmission_resp))
        ## use the results
        for data_trans in data_transmission_resp:
            print(data_trans)

但得到了错误

代码语言:javascript
运行
复制
grpc._channel._MultiThreadedRendezvous: <_MultiThreadedRendezvous of RPC that terminated with:
        status = StatusCode.UNKNOWN
        details = "Exception iterating requests!"
        debug_error_string = "None"

为什么会有这个错误?这是在python上使用双向gRPC通信的正确方式吗?

然后,有一些帖子提到了以下方式:

代码语言:javascript
运行
复制
    my_queue = queue.SimpleQueue()
    with grpc.insecure_channel(addr) as channel:
        stub = ABC_pb2_grpc.ServiceProxyStub(channel)

        my_queue.put(generateRequests())
        data_transmission_resp = stub.DataTransmission(iter(my_queue.get, None))

同样的错误..。

EN

回答 2

Stack Overflow用户

发布于 2021-12-22 21:28:32

Exception iterating requests!意味着请求迭代器会引发异常。我建议增加一个试捕子句,看看出了什么问题。

票数 1
EN

Stack Overflow用户

发布于 2022-03-24 12:57:24

对于那些希望rpc成为一元流而不是流流的人:

不幸的是,当我将自己的流声明为stream-stream时,我也犯了同样的错误,但我使用它就像使用unary-stream一样。我只需要修复我的消息并重新生成代码。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70433943

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档