【问题标题】:Request-streaming gRPC client request error请求流式处理 gRPC 客户端请求错误
【发布时间】:2019-06-03 13:25:44
【问题描述】:

当我运行我的 gRPC 客户端并尝试将请求流式传输到服务器时,我收到此错误:“TypeError: has type list_iterator, but expected one of: bytes, unicode”

我是否需要以某种方式对我发送的文本进行编码?错误消息是有道理的,因为我肯定传入了一个迭代器。我从 gRPC 文档中假设这是需要的。 (https://grpc.io/docs/tutorials/basic/python.html#request-streaming-rpc)Anyway,发送列表或字符串会产生类似的错误。 目前,我在请求中向服务器发送了一个小的字符串测试列表,但我计划将来使用大量文本流式传输请求。

这是我的一些客户端代码。

def gen_tweet_space(text):
    for tweet in text:
        yield tweet

def run():
 channel = grpc.insecure_channel('localhost:50050')
 stub = ProseAndBabel_pb2_grpc.ProseAndBabelStub(channel)

 while True:
     iterator = iter(block_of_text)
     response = stub.UserMarkov(ProseAndBabel_pb2.UserTweets(tweets=iterator))

这里是相关的服务器代码:

def UserMarkov(self, request_iterator, context):
        return ProseAndBabel_pb2.Babel(prose=markov.get_sentence(request_iterator.tweets))

这是定义 rpc 和消息的原型:

service ProseAndBabel {

rpc GetHaiku (BabelRequest) returns (Babel) {}
rpc GetBabel (BabelRequest) returns (Babel) {}
rpc UserMarkov (stream UserTweets) returns (UserBabel) {}
}

message BabelRequest{
  string ask = 1;
}

message Babel{
  string prose = 1;
}

message UserTweets{
  string tweets = 1;
}

message UserBabel{
  string prose = 1;
}

我已经成功地让非流式 rpc 工作,但是在查找 python 应用程序的请求侧流式传输的演练时遇到了麻烦,所以我确定我在这里遗漏了一些东西。任何指导/方向表示赞赏!

【问题讨论】:

    标签: python streaming rpc grpc


    【解决方案1】:

    您需要将请求的迭代器传递给 gRPC 客户端存根,而不是传递给 protobuf 构造函数。当前代码尝试使用迭代器而不是单个字符串来实例化UserTweets protobuf,从而导致类型错误。

    response = stub.UserMarkov(ProseAndBabel_pb2.UserTweets(tweets=iterator))
    

    您需要让iterator 返回ProseAndBabel_pb2.UserTweets 的实例,每个实例都包含您要发送的请求字符串之一,并将迭代器本身传递给存根。比如:

    iterator = iter([ProseAndBabel_pb2.UserTweets(tweets=x) for x in block_of_text])
    response = stub.UserMarkov(iterator)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-07
      • 2021-12-08
      • 2023-01-14
      • 1970-01-01
      • 2021-07-20
      • 1970-01-01
      相关资源
      最近更新 更多