Python grpc超时机制代码示例

所属分类: 脚本专栏 / python 阅读数: 965
收藏 0 赞 0 分享

工作中遇到一个问题,上游服务通过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之有容乃大的list(3)

现在是讲lis的第三章了。俗话说,事不过三,不知道在开头,我也不知道这一讲是不是能够把基础的list知识讲完呢。哈哈。其实如果真正写文章,会在写完之后把这句话删掉的。而我则是完全像跟看官聊天一样,就不删除了。
收藏 0 赞 0 分享

Python专用方法与迭代机制实例分析

这篇文章主要介绍了Python专用方法与迭代机制,包括类的私有方法、专有方法、模块私有对象、迭代__iter__()方法的对象等,需要的朋友可以参考下
收藏 0 赞 0 分享

Python多进程编程技术实例分析

这篇文章主要介绍了Python多进程编程技术,包括了线程、队列、同步等概念及相关的技巧总结,需要的朋友可以参考下
收藏 0 赞 0 分享

Python实现备份文件实例

这篇文章主要介绍了Python实现备份文件的方法,可实现针对各类常见扩展名的文件进行备份的功能,需要的朋友可以参考下
收藏 0 赞 0 分享

python进程管理工具supervisor使用实例

这篇文章主要介绍了python进程管理工具supervisor使用实例,本文介绍了supervisor的安装、配置、使用等内容,需要的朋友可以参考下
收藏 0 赞 0 分享

python写的一个squid访问日志分析的小程序

这篇文章主要介绍了python写的一个分析squid访问日志的小程序,本文实现的目标是统计access.log中的ip数目,需要的朋友可以参考下
收藏 0 赞 0 分享

Python实现的检测web服务器健康状况的小程序

这篇文章主要介绍了Python实现的检测web服务器健康状况的小程序,本文使用socket库来实现,需要的朋友可以参考下
收藏 0 赞 0 分享

python字符串连接的N种方式总结

python中有很多字符串连接方式,今天在写代码,顺便总结一下,从最原始的字符串连接方式到字符串列表连接,大家感受下
收藏 0 赞 0 分享

Python中捕捉详细异常信息的代码示例

这篇文章主要介绍了Python中捕捉详细异常信息的代码示例,本文的代码是从Python 2.7的源码中得来,可以获取文件位置、行号、函数、异常信息等内容,需要的朋友可以参考下
收藏 0 赞 0 分享

Python threading多线程编程实例

这篇文章主要介绍了Python threading多线程编程实例,本文讲解了使用函数和线程类实现多线程编程的例子,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多