Go/Python 基于gRPC传输图片
python程序作为服务端,Go程序作为客户端,基于gPRC进行通信
客户端
定义proto文件:
syntax = "proto3";
option go_package = ".;transfer";
service Greeter {
rpc SendImage (ImageRequest) returns (ImageReply) {}
}
message ImageRequest {
string name = 1;
bytes image = 2;
}
message ImageReply {
string message = 1;
}
编译: protoc --go_out=. --go-grpc_out=. ./*.proto
调用:
package main
import (
"context"
"google.golang.org/grpc"
"io/ioutil"
"log"
"time"
"vtion/transfer"
)
const (
address = "localhost:50051"
name = "test"
)
func main() {
conn, err := grpc.Dial(address, grpc.WithInsecure())
if err != nil {
log.Fatalf("connect error: %v", err.Error())
}
defer conn.Close()
client := transfer.NewGreeterClient(conn)
ctx, cancel := context.WithTimeout(context.Background(), time.Second)
defer cancel()
image, err := ioutil.ReadFile("./images/binary.jpg")
if err != nil {
log.Fatalf("read error: %v", err.Error())
}
res, err := client.SendImage(ctx, &transfer.ImageRequest{Name: name, Image: image})
if err != nil {
log.Fatalf("send error: %v", err.Error())
}
log.Println(res.Message)
}
服务端
proto文件:
syntax = "proto3";
service Greeter {
rpc SendImage (ImageRequest) returns (ImageReply) {}
}
message ImageRequest {
string name = 1;
bytes image = 2;
}
message ImageReply {
string message = 1;
}
编译: python3 -m grpc_tools.protoc -I. --python_out=. --grpc_python_out=. transfer.proto
调用:
from concurrent import futures
from PIL import Image
import time, logging, grpc, io
import transfer_pb2
import transfer_pb2_grpc
class Greeter(transfer_pb2_grpc.GreeterServicer):
def SendImage(self, request, context):
stream = request.image
data = io.BytesIO(stream)
image = Image.open(data)
image.save("test.png")
return transfer_pb2.ImageReply(message=f"success {request.name}")
def serve():
server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))
transfer_pb2_grpc.add_GreeterServicer_to_server(Greeter(), server)
server.add_insecure_port("[::]:50051")
server.start()
server.wait_for_termination()
if __name__ == "__main__":
serve()
Go/Python 基于gRPC传输图片的更多相关文章
- 技术实践:教你用Python搭建gRPC服务
摘要:gRPC是一个高性能.通用的开源RPC框架,其由Google主要面向移动应用开发并基于HTTP/2协议标准而设计,基于ProtoBuf序列化协议开发,且支持众多开发语言. 本文分享自华为云社区& ...
- python基于LeanCloud的短信验证
python基于LeanCloud的短信验证 1. 获取LeanCloud的Id.Key 2. 安装Flask框架和Requests库 pip install flask pip install re ...
- Python基于共现提取《釜山行》人物关系
Python基于共现提取<釜山行>人物关系 一.课程介绍 1. 内容简介 <釜山行>是一部丧尸灾难片,其人物少.关系简单,非常适合我们学习文本处理.这个项目将介绍共现在关系中的 ...
- Python 基于Python实现的ssh兼sftp客户端(上)
基于Python实现的ssh兼sftp客户端 by:授客 QQ:1033553122 实现功能 实现ssh客户端兼ftp客户端:实现远程连接,执行linux命令,上传下载文件 测试环境 Win7 ...
- Python基于socket模块实现UDP通信功能示例
Python基于socket模块实现UDP通信功能示例 本文实例讲述了Python基于socket模块实现UDP通信功能.分享给大家供大家参考,具体如下: 一 代码 1.接收端 import ...
- Python基于正则表达式实现文件内容替换的方法
Python基于正则表达式实现文件内容替换的方法 本文实例讲述了Python基于正则表达式实现文件内容替换的方法.分享给大家供大家参考,具体如下: 最近因为有一个项目需要从普通的服务器移植到SAE,而 ...
- Python基于回溯法解决01背包问题实例
Python基于回溯法解决01背包问题实例 这篇文章主要介绍了Python基于回溯法解决01背包问题,结合实例形式分析了Python回溯法采用深度优先策略搜索解决01背包问题的相关操作技巧,需要的朋友 ...
- 通过python基于netconf协议获取网络中网元的配置数据,助力企业网络控制自动化轻松实现!
摘要:在当今信息化时代,大多数企业都需要网络支撑企业的ICT运行,提升企业运行效率,针对企业网络中的网元设备(包括交换机,路由器,防火墙等),很多企业希望根据自身的业务特点定制网络管理,比如可以实现网 ...
- python中grpc配置asyncio使用
python中grpc配置asyncio使用 安装grpclib pip3 install grpclib protoc编译.proto文件,生成源码文件 python -m grpc_tools.p ...
- Python基于周立功ZCANPRO开发刷写脚本
一.概述 1.背景 本文章主要是记录用Python基于周立功ZCANPRO开发VIN和SN码刷写工具. 2.环境搭建 Python3.8.10 32位(必须) 周立功上位机:ZCANPRO 周立功CA ...
随机推荐
- pom.xml配置资源过滤
<build> <!--设置资源过滤--> <resources> <resource> <directory>src/main/java& ...
- 多线程post
async Task<long> post() { var stopwatch = new Stopwatch(); stopwatch.Start(); var client = new ...
- Oracle联机备份与恢复
联机备份又称为热备份,在数据库运行的情况下对数据库进行物理备份.进行联机备份,数据库必须运行在归档日志(ARCHIVELOG)模式下. 联机完全备份步骤: 1.设置归档日志模式,创建恢复目录用的表空间 ...
- datax-web踩坑记录
实习期间接触了两种ETL工具:kettle.datax 1.datax-web的安装 (跟着文档一步步来就好了) https://github.com/WeiYe-Jing/datax-web/blo ...
- 三种遍历的方法(map和forEach的区别)
一. for循环 arr[index]可以改变原数组 二. forEach方法 forEach方法的返回值是一个undefined: 2. 在循环体内改变item的值不会影响原数组,而是只在循环体内生 ...
- python-实现栈结构
# encoding=utf-8 class Stack(object): """栈""" def __init__(self): &quo ...
- 关系类处理专题之创建关系类|RelationShipClass
/// <summary> /// 存在于数据库中的数据集中 /// </summary> /// <param name="mdbPath"> ...
- centos下安装不同版本的python
1. 安装环境以及依赖包 可以直接yum安装: yum -y install git gcc make patch zlib-devel gdbm-devel openssl-devel sqlite ...
- Redis在线安装+三种启动方式(自启配置)
1.下载 1)检查是否安装wget插件 $ wget --version 2)如未安装,使用yum进行安装 $ yum install -y wget 3)下载redis安装包 $ wge ...
- C#中Base64转换为byte[]再进行处理
byte[] arr = Convert.FromBase64String(temp.Substring(temp.IndexOf(",") + 1)); using (Strea ...