0

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

基本上有一个主线程加上两个持续运行的子线程,每个连接的客户端加上一个子线程。

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

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

有任何想法吗?

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

我正在寻找一种通过在控制台中执行某些东西来做到这一点的方法。

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

4

1 回答 1

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()

不可能向线程发送等效的终止信号。相反,您应该设置一个标志,向孩子们发出停止信号。

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

while not parent.stopped:
    do_some_maintenance_work
于 2012-09-14T23:11:19.710 回答