https://www.jianshu.com/p/43fdfeb105ff  (很好的一篇简书)

https://www.grpc.io/docs/tutorials/basic/python/(官方文档)

实习之后的第一篇博客,导师让我研究grpc流式传输,真的是折腾了n天,慢的像只蜗牛。。。

实现流式传输的关键代码是这一段,在服务器上可以一秒内把110MB的文本传输到另一个文本。

size=2190304
# 把文本转换为request
def request_from_db(text):tmp=""for line in text:tmp+=lineif len(tmp)>=size:request = helloworld_pb2.HelloRequest(text=tmp)tmp=""yield requestrequest = helloworld_pb2.HelloRequest(text=tmp)yield request
# hello_db.pydef read_hello_db():with open('/root/model/hello_db.txt','r') as f:for line in f:yield line

helloworld.proto

// [python quickstart](https://grpc.io/docs/quickstart/python.html#run-a-grpc-application)
// python -m grpc_tools.protoc --python_out=. --grpc_python_out=. -I. helloworld.proto
// python helloworld_grpc_server.py
// python helloworld_grpc_client.py
// helloworld.proto
syntax = "proto3";
service Greeter {rpc HelloChat(stream HelloRequest) returns (stream HelloReply){}
}message HelloRequest {string text = 1;
}message HelloReply{string text =1;
}

helloworld_grpc_server.py

# -*-coding:utf-8-*-
from concurrent import futures
import time
import grpc
import helloworld_pb2
import helloworld_pb2_grpc
import hello_db# 实现 proto 文件中定义的 GreeterServicer
class Greeter(helloworld_pb2_grpc.GreeterServicer):def __init__(self):self.db = hello_db.read_hello_db()# 实现 proto 文件中定义的 rpc 调用# 传入request 返回responsedef HelloChat(self, request_iterator, context):for request in request_iterator:response = helloworld_pb2.HelloReply(text = request.text)yield responsedef serve():# 启动 rpc 服务server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))helloworld_pb2_grpc.add_GreeterServicer_to_server(Greeter(), server)server.add_insecure_port('[::]:50051')server.start()try:while True:time.sleep(60*60*24) # one day in secondsexcept KeyboardInterrupt:server.stop(0)if __name__ == '__main__':serve()

helloworld_grpc_client.py

# -*-coding:utf-8-*-
import grpc
import helloworld_pb2
import helloworld_pb2_grpc
import hello_db
import time
size=2190304
# 把文本转换为request
def request_from_db(text):tmp=""for line in text:tmp+=lineif len(tmp)>=size:request = helloworld_pb2.HelloRequest(text=tmp)tmp=""yield requestrequest = helloworld_pb2.HelloRequest(text=tmp)yield requestdef run():# 连接 rpc 服务器start_time1 = time.time()channel = grpc.insecure_channel('localhost:50051')# 调用 rpc 服务stub = helloworld_pb2_grpc.GreeterStub(channel)req = request_from_db(hello_db.read_hello_db())start_time2 = time.time()response = stub.HelloChat(req)elapsed_time2 = int(time.time() - start_time2)print(elapsed_time2)with open('/root/model/write_db.txt', 'w') as f:for item in response:f.write(item.text)elapsed_time1 = int(time.time() - start_time1)print(elapsed_time1)if __name__ == '__main__':run()

2019.7.9开始痛并快乐着的实习生涯,有收获,也有迷茫。加油把!

grpc流式传输心得相关推荐

  1. grpc 流式传输_编写下载服务器。 第一部分:始终流式传输,永远不要完全保留在内存中...

    grpc 流式传输 下载各种文件(文本或二进制文件)是每个企业应用程序的生死攸关的事情. PDF文档,附件,媒体,可执行文件,CSV,超大文件等.几乎每个应用程序迟早都必须提供某种形式的下载. 下载是 ...

  2. grpc流式传输示例(c++)

    目录 grpc理解 流式传输方式 Attention grpc理解 grpc是结合protobuf的远程调用框架,服务端和客户端均支持同步和异步模式.同步模式下,服务器的service函数会阻塞,且当 ...

  3. Socket编程(C语言实现)—— 为什么流式传输类似于管道?不区分边界?

    1.管道实现: (1)代码实现:[root@localhost pipe]# cat pipe.c #include <stdio.h> #include <unistd.h> ...

  4. xbox360链接pc_如何将实时电视从Xbox One流式传输到Windows PC,iPhone或Android Phone

    xbox360链接pc Set up your Xbox One's TV integration and you can do more than just watch TV on your Xbo ...

  5. 基于ASP.NET Core SignalR的流式传输

    基于ASP.NET Core SignalR的流式传输 SignalR概述 SignalR是ASP.NET Core下非常流行的实现Web实时功能的库.微软再文档中列出了适合的应用场景: 适合 Sig ...

  6. ASP.NET Core SignalR中的流式传输

    什么是流式传输? 流式传输是这一种以稳定持续流的形式传输数据的技术. 流式传输的使用场景 有些场景中,服务器返回的数据量较大,等待时间较长,客户端不得不等待服务器返回所有数据后,再进行相应的操作.这时 ...

  7. java流式传输对象_Java性能:面向教学与流式传输

    java流式传输对象 在for循环中向上或向下计数是最有效的迭代方式吗? 有时答案既不可行. 阅读这篇文章,了解不同迭代品种的影响. 迭代性能 关于如何以高性能进行迭代有很多观点. Java中的传统迭 ...

  8. java流式传输对象_使用Java 8在地图上流式传输

    java流式传输对象 在本文中,我将向您展示如何在标准Java映射上有效地实现Speedment Open Source流,并将Stream接口扩展为MapStream! 即使在复杂的情况下,此添加将 ...

  9. spark 流式计算_流式传输大数据:Storm,Spark和Samza

    spark 流式计算 有许多分布式计算系统可以实时或近实时处理大数据. 本文将从对三个Apache框架的简短描述开始,并试图对它们之间的某些相似之处和不同之处提供一个快速的高级概述. 阿帕奇风暴 在风 ...

  10. Java:以CSV格式流式传输JDBC结果集

    在上一篇文章中 ,我展示了如何将java.sql.ResultSet转换为JSON并将其流回调用方. 这篇文章是关于以CSV格式流式传输的. 流式传输使您可以一点一点地传输数据,而不必将所有数据都加载 ...

最新文章

  1. 数据库里存json数据
  2. 【 MATLAB 】gallery 中的 uniformdata
  3. 【Matlab 图像】边缘检测算法及效果演示
  4. python如何打印字符串_如何在Python中打印“漂亮”字符串输出
  5. 推荐几个超会整活儿的Go公众号
  6. FastDFS安装脚本
  7. 以时间作为条件查询记录(案例)
  8. C#生成Excel出现8000401a的错误的另一种解决办法。
  9. 地图上制作线路的动画_航线地图上的动画飞行效果怎么实现?只要五步轻松上手...
  10. 二分类确定画出roc曲线,以及基于roc曲线获得最佳划分阈值
  11. 【论文阅读】Zero-Resource Knowledge-Grounded Dialogue Generation
  12. 电脑上怎么录制视频 电脑实用快捷键
  13. turtle(海龟)库的使用
  14. 在大学城开一间宾馆能挣多少钱?
  15. 【数据分析师---数据可视化】第三章:逐步详解操作Tableau进行20+种类图表绘制
  16. 《每日一题》——146. LRU 缓存|460. LFU 缓存
  17. 为什么现在开发这么累呢?
  18. 基于STM32F407结合HC-SR04、TCRT5000模块 设计的智能小车(下篇)
  19. SpringBoot配置文件的修改
  20. 部署AF(下一代防火墙)3透明模式access口

热门文章

  1. Android事件分发机制综述
  2. 微信小程序 在wxml写过滤器 脱敏手机号
  3. js内置对象方法笔记
  4. sublime text里面中文字体显示异常解决方案
  5. 关于华为手机无线调试
  6. cookie二级域名和三级域名跨域实践
  7. python3d坐标系转换_世界坐标系,相机坐标系和图像坐标系的转换(Python)
  8. iOS---Xcode中删除描述文件Provisioning Profiles
  9. Cartographer 源码解析1.1 —— 算法整体结构
  10. 分库分表学习总结(1)——数据库中间件MyCat学习总结之MyCat入门简介