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传输图片的更多相关文章

  1. 技术实践:教你用Python搭建gRPC服务

    摘要:gRPC是一个高性能.通用的开源RPC框架,其由Google主要面向移动应用开发并基于HTTP/2协议标准而设计,基于ProtoBuf序列化协议开发,且支持众多开发语言. 本文分享自华为云社区& ...

  2. python基于LeanCloud的短信验证

    python基于LeanCloud的短信验证 1. 获取LeanCloud的Id.Key 2. 安装Flask框架和Requests库 pip install flask pip install re ...

  3. Python基于共现提取《釜山行》人物关系

    Python基于共现提取<釜山行>人物关系 一.课程介绍 1. 内容简介 <釜山行>是一部丧尸灾难片,其人物少.关系简单,非常适合我们学习文本处理.这个项目将介绍共现在关系中的 ...

  4. Python 基于Python实现的ssh兼sftp客户端(上)

    基于Python实现的ssh兼sftp客户端   by:授客 QQ:1033553122 实现功能 实现ssh客户端兼ftp客户端:实现远程连接,执行linux命令,上传下载文件 测试环境 Win7 ...

  5. Python基于socket模块实现UDP通信功能示例

    Python基于socket模块实现UDP通信功能示例 本文实例讲述了Python基于socket模块实现UDP通信功能.分享给大家供大家参考,具体如下: 一 代码 1.接收端     import ...

  6. Python基于正则表达式实现文件内容替换的方法

    Python基于正则表达式实现文件内容替换的方法 本文实例讲述了Python基于正则表达式实现文件内容替换的方法.分享给大家供大家参考,具体如下: 最近因为有一个项目需要从普通的服务器移植到SAE,而 ...

  7. Python基于回溯法解决01背包问题实例

    Python基于回溯法解决01背包问题实例 这篇文章主要介绍了Python基于回溯法解决01背包问题,结合实例形式分析了Python回溯法采用深度优先策略搜索解决01背包问题的相关操作技巧,需要的朋友 ...

  8. 通过python基于netconf协议获取网络中网元的配置数据,助力企业网络控制自动化轻松实现!

    摘要:在当今信息化时代,大多数企业都需要网络支撑企业的ICT运行,提升企业运行效率,针对企业网络中的网元设备(包括交换机,路由器,防火墙等),很多企业希望根据自身的业务特点定制网络管理,比如可以实现网 ...

  9. python中grpc配置asyncio使用

    python中grpc配置asyncio使用 安装grpclib pip3 install grpclib protoc编译.proto文件,生成源码文件 python -m grpc_tools.p ...

  10. Python基于周立功ZCANPRO开发刷写脚本

    一.概述 1.背景 本文章主要是记录用Python基于周立功ZCANPRO开发VIN和SN码刷写工具. 2.环境搭建 Python3.8.10 32位(必须) 周立功上位机:ZCANPRO 周立功CA ...

随机推荐

  1. pom.xml配置资源过滤

    <build> <!--设置资源过滤--> <resources> <resource> <directory>src/main/java& ...

  2. 多线程post

    async Task<long> post() { var stopwatch = new Stopwatch(); stopwatch.Start(); var client = new ...

  3. Oracle联机备份与恢复

    联机备份又称为热备份,在数据库运行的情况下对数据库进行物理备份.进行联机备份,数据库必须运行在归档日志(ARCHIVELOG)模式下. 联机完全备份步骤: 1.设置归档日志模式,创建恢复目录用的表空间 ...

  4. datax-web踩坑记录

    实习期间接触了两种ETL工具:kettle.datax 1.datax-web的安装 (跟着文档一步步来就好了) https://github.com/WeiYe-Jing/datax-web/blo ...

  5. 三种遍历的方法(map和forEach的区别)

    一. for循环 arr[index]可以改变原数组 二. forEach方法 forEach方法的返回值是一个undefined: 2. 在循环体内改变item的值不会影响原数组,而是只在循环体内生 ...

  6. python-实现栈结构

    # encoding=utf-8 class Stack(object): """栈""" def __init__(self): &quo ...

  7. 关系类处理专题之创建关系类|RelationShipClass

    /// <summary> /// 存在于数据库中的数据集中 /// </summary> /// <param name="mdbPath"> ...

  8. centos下安装不同版本的python

    1. 安装环境以及依赖包 可以直接yum安装: yum -y install git gcc make patch zlib-devel gdbm-devel openssl-devel sqlite ...

  9. Redis在线安装+三种启动方式(自启配置)

    ​ 1.下载 1)检查是否安装wget插件 $ wget --version ​ 2)如未安装,使用yum进行安装 $ yum install -y wget ​ 3)下载redis安装包 $ wge ...

  10. C#中Base64转换为byte[]再进行处理

    byte[] arr = Convert.FromBase64String(temp.Substring(temp.IndexOf(",") + 1)); using (Strea ...