gRPC 框架 简单使用(python版)

gRPC Python 教程(一): 原理与基本用法 gRPC 基于RPC,有很多优点,使用protobuf 序列化,采用 HTTP/2, 包头压缩,流式处理技术,支持双向通信,支持多语言环境, C++, Python, Go, Java,Rust等。 阅读详情
AI摘要

本文介绍了gRPC框架的基本概念,包括其作为分布式应用接口的重要性和基于协议缓冲区的数据结构。通过Python实现的HelloWorld案例,展示了服务端和服务端的代码实现,以及如何使用protoc工具生成必要的gRPC文件。

一、gRPC 简介

概述

gRPC是搭建分布式应用接口和客户端的框架。在 gRPC 中,客户端应用程序可以直接调用不同机器上的服务器应用程序上的方法,就像它是本地对象一样,可以更容易创建分布式应用程序和服务。与许多 RPC 系统一样,gRPC 基于定义服务的思想,指定可以远程调用的方法及其参数和返回类型。在服务端,服务端实现这个接口并运行一个 gRPC 服务器来处理客户端调用。在客户端,客户端有一个存根(在某些语言中仅称为客户端),它提供与服务器相同的方法。

在这里插入图片描述

gRPC 客户端和服务器可以在各种环境中运行和相互通信——从 Google 内部的服务器到您自己的桌面——并且可以用任何 gRPC 支持的语言编写。例如,可以使用 Go、Python 或 Ruby 中的客户端轻松地调用在 Java 中创建 gRPC 服务器。



协议缓冲区

协议缓冲区, 是谷歌开源的结构化数据结构。

协议缓冲区中的数据和服务定义,可以参考:协议缓冲区。

例如,在 proto 文件中定义 gRPC 服务,将 RPC 方法参数和返回类型指定为协议缓冲区消息:

// 定义服务
service Greeter {
	// 发送消息
	rpc SayHello (HelloRequest) returns (HelloReply) {}
}

// 包含用户名的请求消息
message HelloRequest {
	string name = 1;
}

// 包含问候的响应信息
message HelloReply {
	string message = 1;
}

使用在proto中定义的服务和数据结构,可以使用gRPC的插件来生成对应的grpc文件。



二、gRPC 的 Hello World

gRPC可以使用多种语言编写,下面使用python来实现一个简单的gRPC服务端和客服端。

一般来说写gRPC服务,需要三个文件:

  • .proto文件:用于生成gRPC服务文件。
  • server文件:定义 gRPC 服务端。
  • client文件:定义 gRPC 客户端,调用服务端接口。

基本环境如下:

  • python 3.10.2

在这里插入图片描述



协议缓冲区

定义协议缓冲区,新建一个hello.proto文件,写入以下内容:

syntax = "proto3";

package hello;

message User {
	string id = 1;
	string name = 2;
}

message Reply {
	string message = 1;
}

service UserInfo {
	rpc Info (User) returns (Reply) {}
}

这个文件首先定义了两个数据结构,一个是用户的详细信息User,一个是用户信息格式化输出。

需要注意的是当一个message中定义多个变量时,赋值的编号不能相同,如User中的id和name分别是1和2。

然后定义了一个简单的服务UserInfo,将User传入,最后返回Reply(注意是returns,加了s)

最后使用gRPC的工具包,生成gRPC服务类:

python -m grpc_tools.protoc -I. --python_out=. --grpc_python_out=. ./hello.proto

它会生成两个文件hello_pb2.py和hello_pb2_grpc.py.

大致可以理解为:_pb2中定义了数据结构。_pb2_grpc中定义了相关的方法。

具体的含义可以去看:生成代码参考



gRPC 服务端

如下,定义 gRPC 服务端hello_server.py,并堵塞监测本地50051端口,等待接收数据:

from concurrent import futures
import logging

import grpc
import hello_pb2
import hello_pb2_grpc

class UserInfo(hello_pb2_grpc.UserInfoServicer):
	def Info(self, request, context):
		return hello_pb2.Reply(message='id: %s; name: %s' % (request.id, request.name))

def serve():
	server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))
	hello_pb2_grpc.add_UserInfoServicer_to_server(UserInfo(), server)
	server.add_insecure_port('[::]:50051')
	server.start()
	server.wait_for_termination()

if __name__ == '__main__':
	logging.basicConfig()
	serve()



gRPC 客户端

如下,定义 gRPC 客户端hello_client.py,通过接收参数,向本地50051端口,传输用户信息:

from __future__ import print_function

import logging, sys

import grpc
import hello_pb2
import hello_pb2_grpc


def run():
	with grpc.insecure_channel('localhost:50051') as channel:
		stup = hello_pb2_grpc.UserInfoStub(channel)
		response = stup.Info(hello_pb2.User(id=sys.argv[1],name=sys.argv[2]))
	print("用户信息: " + response.message)

if __name__ == '__main__':
	logging.basicConfig()
	run()



启动 gRPC

启动gRPC服务端 :

python hello_server.py

在另一个终端窗口中,启动gRPC客户端:

python hello_client.py 1 zhangsan

最后查看效果:

在这里插入图片描述





更多的用法可以参考:

gRPC 官方python教程

gRPC 官方API

协议缓冲区官方文档(需要魔法)

Python-gRPC实践(3)--使用Python实现gRPC服务 通过前面的文章了解到了gRPC是什么,以及清楚使用它的优缺点,现在终于可以开始实现一个gRPC服务了。这里演示的是一个用户与书互动的项目,用户可以通过该项目进行注册,登录,注销等操作,同时也可以上传,查看和评论对应的书籍,通常情况下我们会由一个简单的Web应用来提供这些服务,现在,我们假设这个服务非常庞大,需要把他们按照功能拆分成不同的微服务了,这些服务与Web应用通过gRPC进行通信。注:由于篇幅原因,不会夹杂大量的源代码,需要跳转到Github。 阅读详情

相关推荐

python对于grpc的简单操作(一)

python对grpc的简单操作,以及图片如何通过grpc在客户端和服务端之间传输

????爱好者的博客 6770

【Python进阶学习】gRPC的基本使用教程

【Python进阶学习】gRPC的基本使用教程前言快速上手gRPC了解protocol buffer语法使用使用工具生成对应语言的源代码搭建Python gRPC服务最佳实践gRPC的优势性能代码生成严格的规范流推荐使用gRPC的场景参考文献 前言 什么是RPC服务 RPC,是Remote Procedure Call的简称,翻译成中文就是远程过程调用。RPC就是允许程序调用另一个地址空间(通常是另一台机器上)的类方法或函数的一种服务。 它是一种架设在计算机网络之上并隐藏底层网络技术,可以像调用本地服务一样

dream_successor的专栏 6281

Python 解析 gRPC 在高性能 API 设计中的应用

gRPC 是由 Google 开发的一种远程过程调用(RPC)框架,它允许客户端和服务端通过定义好的接口进行通信。gRPC 支持多种编程语言,包括 Python、Java、Go 等。基于 HTTP/2 协议,支持双向流和多路复用。使用 Protobuf 定义服务接口和数据结构。跨语言支持,方便不同语言的服务端和客户端进行交互。强大的错误处理机制和元数据支持。首先,我们需要定义一个 .proto 文件来描述服务接口和数据结构。

2501_91163674的博客 1792

Python语言实现gRPC通信

gRPC 简介: gRPC 是一款高性能、开源的 RPC 框架,产自 Google,基于 ProtoBuf 序列化协议进行开发,支持多种语言(Golang、Python、Java等),本篇只介绍 Python 的 gRPC 使用。因为 gRPC 对 HTTP/2 协议的支持使其在 Android、IOS 等客户端后端服务的开发领域具有良好的前景。gRPC 提供了一种简单的方法来定义服务,同时客...

bocai_xiaodaidai的博客 1万+

手把手教你用芯驰X9HP驱动MAX96755/MAX96752点亮智能座舱仪表屏(附完整寄存器配置表)

本文详细介绍了如何使用芯驰X9HP驱动MAX96755/MAX96752实现智能座舱仪表屏的完整开发流程,包括硬件架构解析、关键寄存器配置、Linux BSP集成及调试技巧。通过实战指南和完整寄存器配置表,帮助开发者快速掌握驱动开发核心技术,提升智能座舱系统的显示性能与稳定性。

weixin_30879169的博客 524

8.2-12.4GHz喇叭天线设计

使用后处理模板的优化算法,对a1、h_horn、b1进行优化,各参数的优化区间即为之前计算得到的参数范围。由于矩形喇叭的辐射特型基本上是E面和H面扇形喇叭的结合,当波导中只是单模传播(只有TE波)时,矩形喇叭的口径可以通过远场公式推理出来。表示矩形喇叭的口径效率,进行最佳增益设计时,一般取值为0.5。从表中可以看出,该结构在8.58GHz的增益误差为2.68%>2.5%,需要对结构进行优化。建模完成,之后就是在矩形波导尾部添加波导端口激励,以及对应频率的远场监视器。,在这里,将频率定为区间的中心频率。

qq_48897427的博客 6655

【Python分布式服务框架】python实现gRPC服务

文章目录gRPC服务1. 为什么选择 gRPC?简单的服务定义快速启动并扩展跨语言和平台工作双向流和集成身份验证2. Python gRPC2.1. 安装 gRPC 环境2.2. gRPC 服务端示例2.3. gRPC 客户端示例3. 注册服务3.1. Protobuf3.2. 一个简单的3.3. proto3常用数据类型3.4. 实现服务功能逻辑 gRPC服务 1. 为什么选择 gRPC? gRPC 是一个现代开源的高性能远程过程调用 (RPC) 框架,可以在任何环境中运行。它可以通过对负载平衡、跟踪

3269

华为交换机与思科/华三设备LACP对接实战:手把手教你配置链路聚合

本文详细解析了华为交换机与思科、华三设备间的LACP链路聚合配置实战,涵盖核心原理、配置步骤及排错技巧。通过对比不同厂商的实现差异,提供可落地的跨厂商对接方案,助力企业网络工程师高效部署高可靠性链路聚合。

weixin_30836759的博客 422

python如何实现GRPC服务,python实现简单的grpc通信

通常我们利用grpc来接收不同客户端的请求,并将请求数据做业务逻辑处理,最后再返回给客户端。就好像通信基站一样,接收四面八方传来的手机通信请求,基站将这些请求做相应的处理,再返回给不同客户端,达到互联的目的。 总的来说,python实现简单的grpc需要以下步骤:定义protobuf——>通过protobuf生成2份方法文件——>定义服务端——>定义客户端。

尚拙的博客 7866

Unity 数字孪生实战:PiXYZ Plugin工业模型高效处理指南

本文是Unity数字孪生实战指南,重点介绍了如何使用PiXYZ Plugin高效处理工业CAD模型。针对工业模型导入Unity时面临的格式壁垒、数据爆炸和资产混乱等核心痛点,文章提供了从环境安装、基础导入到智能减面、资产清理的完整解决方案,并分享了预设自动化、运行时导入等高级技巧与性能优化策略,帮助开发者快速打通工业设计与实时交互流程。

weixin_29009501的博客 255

从零构建MAVLink通信:PX4飞控与QGC的协议握手全解析

本文详细解析了PX4飞控与QGC地面站通过MAVLink协议进行通信的全过程,重点介绍了航点传输协议的状态机设计、INT类型消息的优化优势以及异常处理与调试技巧。通过实战案例和性能优化建议,帮助开发者高效构建无人机通信系统,提升数据传输效率与稳定性。

weixin_29209805的博客 504

python实现grpc发送文件_Python版gRPC入门实验

什么是RPCRPC(Remote Procedure Call Protocol)-- 远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络协议的协议。RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI网络通信模型中,RPC跨越了传输层和应用层。RPC使得开发包括网络分布式多程序在内的应用程序更加容易。什么是gRPCgRPC 是G...

weixin_39673972的博客 562

Zemax实战录——非序列模式下的微透镜阵列仿真与优化

本文详细介绍了在Zemax非序列模式下进行微透镜阵列仿真的完整流程与优化技巧。文章重点阐述了从序列模式切换到非序列模式的必要性,并逐步指导如何搭建光源、阵列与探测器的仿真环境。核心在于通过调整圆锥系数等关键参数优化像差,并增加光线数以提升仿真精度与均匀性,为光学设计提供可靠依据。

weixin_28339967的博客 512

grpc(RPC框架)

gRPC gRPC 是一款高性能、开源的 RPC 框架,产自 Google,基于 ProtoBuf 序列化协议进行开发,支持多种语言(Golang、Python、Java等) gRPC 对 HTTP/2 协议的支持使其在 Android、IOS 等客户端后端服务的开发领域具有良好的前景。 gRPC 提供了一种简单的方法来定义服务,同时客户端可以充分利用 HTTP2 stream 的特性,从而...

sinat_34734636的博客 2447

保姆级教程:用Cadence Sigrity Power DC搞定HI3516A板卡电源压降仿真(含常见报错解决)

本文提供了一份详细的Cadence Sigrity Power DC直流压降仿真教程,特别针对HI3516A板卡设计。从环境准备、器件建模到仿真执行和结果解读,全面覆盖了电源完整性分析的关键步骤,并提供了常见报错的解决方案,帮助工程师快速掌握直流压降分析技术。

weixin_42569329的博客 322

GIS常用符号化色带(超级色带)根据python制作

GIS自带的色带比较单一,今天分享一款色带,应用之后大家出图的时候可以选择更多的配色,符号化/点击色块/样式引用/将样式添加至列表即可。色带类型比较多,大家可以自己尝试下不同的风格。简单符号化一下,看看效果。以中国县级行政区划为例,

J_Giser的博客 2636

Python中的gRPC简化指南

作者:chen_h 微信号 & QQ:862251340 微信公众号:coderpai Google的gRPC提供了一个框架,用于实现RPC(远程过程调用)工作流。 通过在HTTP / 2上分层并使用协议缓冲区,gRPC有望比传统的REST + JSON API带来很多好处。 这篇文章试图从头开始,采用Python实现一个简单的功能,并通过gRPC接口提供服务。 因此,让我们开始学习构...

CoderPai的博客 656

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Python gRPC 的使用:proto 文件编写、gRPC数据类型、客户端、服务端 代码示例

RPC 是远程过程调用 (Remote Procedure Call) 的缩写形式,gRPC 最初是由 Google 创建的,高性能、开源通用、跨语言和平台 的 RPC 框架。gRPC 使用 Protocol Buffers 定义服务,Protocol Buffers 是一个强大的二进制序列化工具集和语言。

谢TS的博客 1547

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

python实现grpc发送文件_GRPC以及python实现

GRPC简介A high-performance, open-source universal RPC framework --官网rpc通信RPC(remote procedure call 远程过程调用)是什么:提供一套应用程序之间可以通信的机制,使用C/S模型,Client进程调用Server进程提供的接口就像是调用本地函数一样。为什么:相比较restful API的优势:(1)gRPC都使...

weixin_39952182的博客 708

gRPC介绍与初步使用!

gRPC介绍与初步使用!RPCgRPCgRPC示例:① protobuf定义接口与数据类型:② grpc server端代码③ grpc client端代码 gRPC是什么?可以用官网的一句话来概括: A high-performance, open-source universal RPC framework 首先要知道RPC是什么?再来看gRPC RPC RPC(Remote Procedure Call)远程过程调用,简单的理解是一个节点请求另一个节点提供的服务 gRPC gRPC是Google发布的

野先生的专栏 710

在linux用python搭建grpc服务

借鉴文章gRPC 是一款高性能、开源的 RPC 框架,产自 Google,基于 ProtoBuf 序列化协议进行开发,支持多种语言(Golang、Python、Java等),本篇只介绍 Python 的 gRPC 使用。因为 gRPC 对 HTTP/2 协议的支持使其在 Android、IOS 等客户端后端服务的开发领域具有良好的前景。gRPC 提供了一种简单的方法来定义服务,同时客户端可以充分利用 HTTP2 stream 的特性,从而有助于节省带宽、降低 TCP 的连接次数、节省CPU的使用等代码如下(

qq_55542491的博客 986

python grpc 并发性能_python 使用gRPC

Python gRPC概述:gRPC 是谷歌开源的一个rpc(远程程序调用)框架,可以轻松实现跨语言,跨平台编程,其采用gRPC协议(基于HTTP2)。rpc:remote procedure call, 翻译过来就是是远程程序调用。具体来说,就是客户端c1需要调用服务器s1上的某个方法(函数),得到相应的返回值并传递给c1。gRPC协议要说gRPC协议需要先了解HTTP2, 虽然HTTP1.X ...

weixin_39620273的博客 662

grpc传输大量数据python_gRPC传输协议使用(python教程)-Go语言中文社区

全栈工程师开发手册 (作者:栾鹏)gRPC 简介:gRPC 是一款高性能、开源的 RPC 框架,产自 Google,基于 ProtoBuf 序列化协议进行开发,支持多种语言(Golang、Python、Java等),本篇只介绍 Python 的 gRPC 使用。因为 gRPC 对 HTTP/2 协议的支持使其在 Android、IOS 等客户端后端服务的开发领域具有良好的前景。gRPC 提供了一种...

weixin_39972519的博客 212

grpc python_Python中的gRPC简化指南

Google的gRPC提供了用于实现RPC(远程过程调用)工作流的框架。通过在HTTP / 2之上分层并使用协议缓冲区,gRPC有望比传统的REST + JSON API带来很多好处。0.定义功能让我们创建一个我们想要公开(远程调用)的函数(过程)— square_root,位于calculator.py中importmathdefsquare_root(x):y=math.sqrt(x)retu...

weixin_39870413的博客 170

python 提供gRPC服务

最近学习了python 如何提供gRPC 服务, 这里以官方教程和博客,简单记录一下具体步骤 0. 安装相关依赖包:grpcio、protobuf、grpcio-tools 1. 定义proto文件, 这里命名为`hello.proto` syntax = "proto3"; package hello; //定义服务接口 service GrpcService { rpc hello (HelloRequest) returns (HelloResponse) {} //一个服务..

beingstrong的博客 789
上一篇: 使用Tableau做数据分析的一些思考
下一篇: Elasticsearch基础概念和Python操作
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力生活的黄先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值