我有一个GCE服务器设置来处理一些数据分析。我可以使用ws
通过twisted
与之通信。我是这台服务器的唯一客户。
系统设置如下:
spawn_multiprocessing_hierarchy()
reactor.run() # Blocks main thread
stop_everything_and_cleanup()
当我试图停止系统并连接客户端时,reactor
会忽略(或无限延迟?)SIGTERM
,因为它正在处理客户端的连接。但是,系统的每个其他部分都是容错的,reactor
从不处理任何关键数据。它仅用于监控目的。这意味着我可以轻松SIGKILL
它不是因为其他multiprocess.Process
es需要在内存中转储数据,以便它们可以继续在下次启动时最后停止的位置。
是否可以立即拥有SIGTERM
(无需等待在反应堆中运行任务完成)丢弃任何连接并停止反应堆?
答案 0 :(得分:0)
如果没有看到其余的代码,很难假设确切的问题是什么。通常,当反应堆没有停止时,它是因为任务在线程或进程中运行。 Twisted将尝试做正确的事情"并将等到所有线程/进程完成后再退出。您可以通过reactor.addSystemEventTrigger
停止反应堆时添加事件。