我有一个套接字服务器,它使用线程为每个连接的客户端打开一个线程。 我还有两个不断运行的线程正在进行维护操作。
基本上有主线程加上两个不断运行的子项,每个连接的客户端都有一个子项。
我希望能够安全终止或重启。
我希望能够以某种方式触发终止函数,以指示所有子进程安全终止,然后父进程可以退出。
有什么想法吗?
请不要建议以客户端身份连接并发送会触发该命令的命令。 已经想到了。
我正在寻找一种通过在控制台中执行某些操作来实现此目的的方法。
python套接字服务器作为系统服务运行,并希望在init脚本中实现终止。
答案 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