迫使扭曲的反应堆在sigterm停止

时间:2016-11-11 10:01:56

标签: python twisted reactor twisted.internet sigterm

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

系统设置如下:

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

当我试图停止系统并连接客户端时,reactor会忽略(或无限延迟?)SIGTERM,因为它正在处理客户端的连接。但是,系统的每个其他部分都是容错的,reactor 从不处理任何关键数据。它仅用于监控目的。这意味着我可以轻松SIGKILL它不是因为其他multiprocess.Process es需要在内存中转储数据,以便它们可以继续在下次启动时最后停止的位置。

是否可以立即拥有SIGTERM(无需等待在反应堆中运行任务完成)丢弃任何连接并停止反应堆?

1 个答案:

答案 0 :(得分:0)

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