如果所有子节点都已停止并且阻止其他子节点生成,则终止/重新启动python脚本

时间:2012-09-14 22:58:40

标签: python linux command-line

我有一个套接字服务器,它使用线程为每个连接的客户端打开一个线程。 我还有两个不断运行的线程正在进行维护操作。

基本上有主线程加上两个不断运行的子项,每个连接的客户端都有一个子项。

我希望能够安全终止或重启。

我希望能够以某种方式触发终止函数,以指示所有子进程安全终止,然后父进程可以退出。

有什么想法吗?

请不要建议以客户端身份连接并发送会触发该命令的命令。 已经想到了。

我正在寻找一种通过在控制台中执行某些操作来实现此目的的方法。

python套接字服务器作为系统服务运行,并希望在init脚本中实现终止。

1 个答案:

答案 0 :(得分:1)

执行此操作的最佳方法是在主线程中设置信号处理程序。这可以使用signal模块完成。见:http://docs.python.org/library/signal.html。一个好方法是捕获CTRL-C信号(SIGINT)。

请注意,信号处理程序也可以是类方法,因此您不必使用全局方法(我花了一段时间才发现)。

 def __init__(self):
     signal.signal(signal.SIGINT, self.just_kill_me)

 def just_kill_me(self, sig, frame):
     self.stopped = True
     for t in self.threads:
         t.join()

无法向线程发送等效的kill信号。相反,你应该设置一个标志,让孩子们停下来。

您的子线程应该循环运行,定期检查父级是否请求它们停止。

while not parent.stopped:
    do_some_maintenance_work