我有一个 gRPC HelloWorld 服务器运行,如官方入门指南(https://grpc.io/docs/quickstart/python/)中所示。我现在想从客户端关闭/终止服务器,可能是通过调用服务器方法。
我知道这是可以做到的,因为我阅读了这篇关于如何在 C++ 中做到这一点的文章。如何从客户端关闭 gRPC 服务器(使用 RPC 功能)
我的编程语言是客户端和服务器的python。任何帮助都感激不尽。
我正在寻找一种方法来停止每 2 秒执行一次任务的线程。我决定尝试使用 std::promise/future 以便在设置承诺时线程可以立即退出。
#include <future>
#include <iostream>
#include <chrono>
#include <csignal>
std::promise<void> stop;
int main() {
std::signal(SIGINT, [] (int) { stop.set_value(); } );
auto future = stop.get_future();
while (future.wait_for(std::chrono::seconds(1)) != std::future_status::ready) {
std::cout << "I'm still there" << std::endl;
}
}
Run Code Online (Sandbox Code Playgroud)
实际上这不起作用并以这种方式崩溃:
$ ./a.out 我还在那里 ^Cterminate 在抛出一个 'std::system_error'
what()实例后被调用:未知错误 -1 放弃(核心转储)
好的,一个人应该注意他在处理程序上下文中所做的事情,但我必须说我没有预料到这次崩溃;我真的不明白……你有什么想法吗?