如何在python中从gRPC客户端关闭gRPC服务器?

如何在python中从gRPC客户端关闭gRPC服务器?,python,grpc,grpc-python,Python,Grpc,Grpc Python,我有一台gRPC HelloWorld服务器运行,如官方入门指南()所示。 我现在想从客户端关闭/终止服务器,可能需要调用服务器方法。 我知道这是可以做到的,因为我读了这个帖子,关于如何在C++中这样做。p> 对于客户端和服务器,我的编程语言都是python。任何帮助都将是非常感谢的。 就像C++一样,从处理程序调用是有问题的。相反,您应该使用协调服务程序线程和处理程序线程,例如 在主线程中,执行以下操作 stop\u event=threading.event() server=grpc.se


我有一台gRPC HelloWorld服务器运行,如官方入门指南()所示。 我现在想从客户端关闭/终止服务器,可能需要调用服务器方法。
我知道这是可以做到的,因为我读了这个帖子,关于如何在C++中这样做。p> 对于客户端和服务器,我的编程语言都是python。任何帮助都将是非常感谢的。

就像C++一样,从处理程序调用是有问题的。相反,您应该使用协调服务程序线程和处理程序线程,例如

在主线程中,执行以下操作

stop\u event=threading.event()
server=grpc.server(futures.ThreadPoolExecutor())
foo_pb2_grpc。将FooServicer_添加到服务器(foo(停止事件),服务器)
服务器。添加不安全的端口(…)
server.start()
停止事件。等待()
server.stop()
然后在您的服务程序中,设置请求关闭时的事件:

Foo类(Foo_pb2_grpc.fooserver):
定义初始化(自停止事件):
self.\u stop\u事件=stop\u事件
def停止(自身、请求、上下文):
self.\u stop\u event.set()
返回foo_pb2.ShutdownResponse()

服务器中似乎有一个警告。等待终止()源代码:
threading.Event()。wait()
不能跨平台使用CTRL+C。这会影响解决方案吗。本例不使用
wait\u for\u termination()
2。你能解释一下“不能用CTRL+C”是什么意思吗。这个问题是关于如何基于RPC而不是基于CTRL+C关闭服务器的。您是否想知道如何基于这两个事件之一关闭服务器?