» gRPC快速入门:Python » 5. 创建 client » 5.2 调用服务方法

调用服务方法

对于返回单个响应的 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):