回忆小时候,做项目的时候,需要计算斐波那契数列第n项的值。但我只会使用递归来做到这一点。众所周知,计算斐波那契数列的递归算法效率极低,速度极慢。所以我当时求助于师傅,问他能不能帮我解决这个问题。我的师父说:“是的,我写的,但是代码是用C++写的,你可能看不懂。不过没关系,你可以直接用Python调用。”我很惊讶:“C++代码可以直接用Python调用,好像很麻烦。”师父说:“一点都不麻烦,我给你一个.proto文件和地址,你用它自动生成代码,调用就可以了。”所以,我得到了一个mentors_secret。proto文件,里面的内容很简单:syntax="proto3";messageNumToCalc{int32num=1;}messageResult{int32result=1;stringmsg=2;boolsuccess=3;}serviceMentorsSecret{rpcCalcFib(NumToCalc)returns(Result){}还有一个地址:122.51.39.219:8766。原来是用gRPC。这样我就知道该怎么做了。安装环境首先,我们安装Python版的gRPC:pipinstallgrpciogrpcio-tools生成代码接下来,根据mentors_secret.proto文件,自动生成代码。cd进入mentors_secret.proto文件所在的文件,执行如下命令:python3-mgrpc_tools.protoc-I.--python_out=.--grpc_python_out=../mentors_secret.proto此时可以看到当前文件夹生成两个文件:mentors_secret_pb2.py和mentors_secret_pb2_grpc.py。如下图所示:这两个文件的内容不需要读取。调用远程服务接下来,创建一个名为client.py的新文件来调用远程函数:print('斐波那契数列的第36张图:',result.result)代码加上空行只有10行。第1-3行导入模块,第6和7行创建远程链接。第9行调用远程函数。第10行打印结果。再来看看运行效果:运行结果以秒为单位显示。小结当我们拿到一个.proto文件,需要调用gRPC服务时,一般会有以下几个步骤:(1)自动生成mentors_secret_pb2.py和mentors_secret_pb2_grpc.py文件。(2)在.proto文件中查看服务后的名称MentorsSecret,如下图:(3)写入固定代码:importgrpcfrommentors_secret_pb2_grpcimportMentorsSecretStub#servicenamefollowedbyStubchannel=grpc.insecure_channel('远程服务地址和端口')stub=MentorsSecretStub(channel)(4)调用远程函数。通过.proto文件可以知道远程函数CalcFib接收到一个参数NumToCalc,所以导入:frommentors_secret_pb2importNumToCalc,里面的参数是num,所以在调用远程服务时赋值:para=NumToCalc(num=36)calc_result=stub.CalcFib(para)(5)从.proto中得知,返回的结果是Result中的result属性。然后打印calc_result.result得到结果。
