调用服务方法
对于返回单个响应的 RPC 方法,gRPC Python 支持同步(阻塞)和异步(非阻塞)控制流语义。对于响应流式传输的 RPC 方法,调用将立即返回响应值的迭代器。调用该迭代器的 next()
方法会阻塞,直到要从迭代器中产生的响应可用为止。
简单 RPC
对简单 RPC GetFeature
的同步调用几乎和调用本地方法一样简单。RPC 调用等待 server 操作,要么得到一个响应,要么抛出一个异常:
feature = stub.GetFeature(point)
对 GetFeature
的异步调用与其类似,但更像在线程池里异步调用一个本地方法:
feature_future = stub.GetFeature.future(point)
feature = feature_future.result()
服务端流式 RPC
调用服务端流式 ListFeatures
与操作序列类型类似:
for feature in stub.ListFeatures(rectangle):
客户端流式 RPC
调用客户端流式 RecordRoute
就像给本地方法传入一个迭代器。与前文的简单 RPC 一样,它返回单个响应。同步调用与异步调用皆可。
route_summary = stub.RecordRoute(point_iterator)
route_summary_future = stub.RecordRoute.future(point_iterator)
route_summary = route_summary_future.result()
双向流式 RPC
调用双向流式 RPC RouteChat
有客户端流式和服务端流式的结合语义:
for received_route_note in stub.RouteChat(sent_route_note_iterator):
Loading...
> 此处输出代码运行结果