【发布时间】: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 应用程序的请求侧流式传输的演练时遇到了麻烦,所以我确定我在这里遗漏了一些东西。任何指导/方向表示赞赏!
【问题讨论】: