Python grpc超时机制代码示例


Posted in Python onSeptember 14, 2020

工作中遇到一个问题,上游服务通过grpc调用下游服务,但是由于下游服务负载太高导致上游服务的调用会随机出现超时的情况,但是有一点不太明确:超时之后,下游服务还会继续进行计算么?

于是自己写了一个damon试了一下:

client:

# Copyright 2015 gRPC authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
"""The Python implementation of the GRPC helloworld.Greeter client."""

from __future__ import print_function
import logging

import grpc

import helloworld_pb2
import helloworld_pb2_grpc


def run():
  # NOTE(gRPC Python Team): .close() is possible on a channel and should be
  # used in circumstances in which the with statement does not fit the needs
  # of the code.
  with grpc.insecure_channel('localhost:50051') as channel:
    stub = helloworld_pb2_grpc.GreeterStub(channel)
    response = stub.SayHello(helloworld_pb2.HelloRequest(name='you'), timeout=30)
  print("Greeter client received: " + response.message)


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

server:

# Copyright 2015 gRPC authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
"""The Python implementation of the GRPC helloworld.Greeter server."""

from concurrent import futures
import time
import logging

import grpc

import helloworld_pb2
import helloworld_pb2_grpc

_ONE_DAY_IN_SECONDS = 60 * 60 * 24


class Greeter(helloworld_pb2_grpc.GreeterServicer):

  def SayHello(self, request, context):
  count = 0
  while count < 10:
    print('time:%s' % (time.time()))
    time.sleep(5)
    return helloworld_pb2.HelloReply(message='Hello, %s!' % request.name)


def serve():
  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(_ONE_DAY_IN_SECONDS)
  except KeyboardInterrupt:
    server.stop(0)


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

这两个例子就是在grpc官方提供的python例子上做了一下小的改动,得到的结果是:当client超时报错退出之后,server还是会继续进行计算,直到结束,那如果是这样的话,超时的机制对于server来说是没有作用的,即使client已经不再等待这个结果了,但是server还是会继续计算,浪费server的资源。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python socket多线程通讯实例分析(聊天室)
Apr 06 Python
python入门基础之用户输入与模块初认识
Nov 14 Python
python 中random模块的常用方法总结
Jul 08 Python
Python模块的加载讲解
Jan 15 Python
python爬取酷狗音乐排行榜
Feb 20 Python
获取Pytorch中间某一层权重或者特征的例子
Aug 17 Python
Python定时发送天气预报邮件代码实例
Sep 09 Python
python 爬虫百度地图的信息界面的实现方法
Oct 27 Python
python使用梯度下降和牛顿法寻找Rosenbrock函数最小值实例
Apr 02 Python
3种适用于Python的疯狂秘密武器及原因解析
Apr 29 Python
Python检测端口IP字符串是否合法
Jun 05 Python
基于Python和openCV实现图像的全景拼接详细步骤
Oct 05 Python
python/golang 删除链表中的元素
Sep 14 #Python
Python基于pillow库实现生成图片水印
Sep 14 #Python
python/golang实现循环链表的示例代码
Sep 14 #Python
python实现canny边缘检测
Sep 14 #Python
Python gevent协程切换实现详解
Sep 14 #Python
通过实例了解python__slots__使用方法
Sep 14 #Python
python如何遍历指定路径下所有文件(按按照时间区间检索)
Sep 14 #Python
You might like
PHP 获取目录下的图片并随机显示的代码
2009/12/28 PHP
php数组合并array_merge()函数使用注意事项
2014/06/19 PHP
使用PHP实现阻止用户上传成人照片或者裸照
2014/12/25 PHP
你应该知道PHP浮点数知识
2015/05/13 PHP
PHP生成短网址的思路以及实现方法的详解
2019/03/25 PHP
如何让页面在打开时自动刷新一次让图片全部显示
2012/12/17 Javascript
javascript 系统文件夹文件操作及参数介绍
2013/01/08 Javascript
浅谈angularJS 作用域
2015/07/05 Javascript
解决jQuery ajax请求在IE6中莫名中断的问题
2016/06/20 Javascript
JavaScript导航脚本判断当前导航
2016/07/12 Javascript
jQuery实现的自定义滚动条实例详解
2016/09/20 Javascript
利用jquery正则表达式在页面验证url网址输入是否正确
2017/04/04 jQuery
解决bootstrap中使用modal加载kindeditor时弹出层文本框不能输入的问题
2017/06/05 Javascript
React-router v4 路由配置方法小结
2017/08/08 Javascript
Vue结合SignalR实现前后端实时消息同步
2017/09/19 Javascript
浅谈Vue组件及组件的注册方法
2018/08/24 Javascript
JS高阶函数原理与用法实例分析
2019/01/15 Javascript
新手快速入门JavaScript装饰者模式与AOP
2019/06/24 Javascript
适合前端Vue开发童鞋的跨平台Weex的使用详解
2019/10/16 Javascript
微信小程序实现多行文字超出部分省略号显示功能
2019/10/23 Javascript
element-ui table组件如何使用render属性的实现
2019/11/04 Javascript
Python中常见的异常总结
2018/02/20 Python
Python中判断输入是否为数字的实现代码
2018/05/26 Python
Python实现分段线性插值
2018/12/17 Python
html5版canvas自由拼图实例
2014/10/15 HTML / CSS
Original Penguin英国官方网站:美国著名休闲时装品牌
2016/10/30 全球购物
时装界的“朋克之母”:Vivienne Westwood
2017/07/06 全球购物
集体婚礼策划方案
2014/02/22 职场文书
出生公证书样本
2014/04/04 职场文书
新学期开学标语
2014/06/30 职场文书
民政局副局长民主生活会个人对照检查材料
2014/09/19 职场文书
作风整顿个人剖析材料
2014/10/06 职场文书
2014年党员个人工作总结
2014/12/02 职场文书
委托公证书样本
2015/01/23 职场文书
个人廉洁自律总结
2015/03/06 职场文书
总结Pyinstaller打包的高级用法
2021/06/28 Python