2

我有一个 GCE 服务器设置来处理一些数据分析。我可以通过wsusing与它通信twisted。我是这台服务器的唯一客户。

系统设置如下:

spawn_multiprocessing_hierarchy()
reactor.run()  # Blocks main thread
stop_everything_and_cleanup()

当我试图停止系统并且连接了客户端时,reactor会忽略(或可能无限期延迟?)SIGTERM,因为它正在处理客户端的连接。但是,系统的所有其他部分都是容错的,reactor 从不处理任何关键数据。它的存在仅用于监控目的。这意味着如果SIGKILL不是其他multiprocess.Process需要将数据转储到内存中的es,我可以很容易地在下次启动时继续上次停止的地方。

是否可以SIGTERM立即(无需等待反应堆中正在运行的任务完成)断开任何连接并停止反应堆?

4

1 回答 1

0

如果没有看到您的其余代码,很难假设确切的问题是什么。一般来说,当reactor没有停止时,是因为一个任务正在一个线程或进程中运行。Twisted 将尝试做“正确的事情”,并等到所有线程/进程都完成后再退出。当反应堆停止时,您可以添加一个事件reactor.addSystemEventTrigger

于 2016-11-13T12:37:15.570 回答