python 如何从 gRPC 客户端关闭 gRPC 服务器?
How to shutdown gRPC server from gRPC client in python?
我有一个 gRPC HelloWorld 服务器 运行,如官方入门指南 (https://grpc.io/docs/quickstart/python/) 中所示。
我现在想 shutdown/terminate 来自客户端的服务器,可能是通过调用服务器方法。
我知道这是可以做到的,因为我读过这个 post 关于如何在 C++ 中做到这一点。 How to shutdown gRPC server from Client (using RPC function)
我的客户端和服务器编程语言都是python。任何帮助将不胜感激。
就像在 C++ 中一样,调用 Server.stop()
from a handler would be problematic. Instead, you should coordinate between your servicer thread and handler thread using, e.g., a threading.Event
.
在您的主线程中,执行类似
的操作
stop_event = threading.Event()
server = grpc.server(futures.ThreadPoolExecutor())
foo_pb2_grpc.add_FooServicer_to_server(Foo(stop_event), server)
server.add_insecure_port(...)
server.start()
stop_event.wait()
server.stop()
然后在您的服务程序中,设置请求关闭时的事件:
class Foo(foo_pb2_grpc.FooServicer):
def __init__(self, stop_event):
self._stop_event = stop_event
def Stop(self, request, context):
self._stop_event.set()
return foo_pb2.ShutdownResponse()
我有一个 gRPC HelloWorld 服务器 运行,如官方入门指南 (https://grpc.io/docs/quickstart/python/) 中所示。
我现在想 shutdown/terminate 来自客户端的服务器,可能是通过调用服务器方法。
我知道这是可以做到的,因为我读过这个 post 关于如何在 C++ 中做到这一点。 How to shutdown gRPC server from Client (using RPC function)
我的客户端和服务器编程语言都是python。任何帮助将不胜感激。
就像在 C++ 中一样,调用 Server.stop()
from a handler would be problematic. Instead, you should coordinate between your servicer thread and handler thread using, e.g., a threading.Event
.
在您的主线程中,执行类似
的操作stop_event = threading.Event()
server = grpc.server(futures.ThreadPoolExecutor())
foo_pb2_grpc.add_FooServicer_to_server(Foo(stop_event), server)
server.add_insecure_port(...)
server.start()
stop_event.wait()
server.stop()
然后在您的服务程序中,设置请求关闭时的事件:
class Foo(foo_pb2_grpc.FooServicer):
def __init__(self, stop_event):
self._stop_event = stop_event
def Stop(self, request, context):
self._stop_event.set()
return foo_pb2.ShutdownResponse()