当这个线程在另一个线程中创建时,如何干净地杀死Python中的“while true”线程?

问题描述 投票:0回答:1

在我现在正在工作的项目中,我的任务是用python创建一个服务器客户端程序。 这个想法是让“n”个远程设备连接到服务器。通过套接字编程,服务器将侦听设备发出的连接请求,并为每个请求创建一个线程。每个线程将负责从设备接收数据。基本上,该程序的工作原理如下:

  • 当程序启动时,会创建一个“While true”线程(我们称之为“侦听器”)并等待远程设备请求连接。
  • 该线程在接受连接后,将负责创建“n”个线程,每个远程设备一个。例如,如果我们有 6 个设备,我们将有 6 个线程负责从设备接收数据。
  • 每个线程也是一个“While true”线程,因为设备将无限期地继续发送数据。
  • 我想在套接字超时或错误时终止线程。但我不想杀死它们全部,只想杀死失去连接或崩溃的设备的线程。当设备再次启动时,我想为设备创建一个新线程。

现在,一切工作正常,除了当出现套接字错误或超时时,即使使用“break”命令中断了线程的循环,线程仍保持活动状态。我在代码中有一个打印,使用“threading.active_count()”命令不断计算活动线程。每次连接断开时,该数字都会增加。我认为这对于系统的性能/内存来说很糟糕。在寻找解决方案时,我找到了“thread.join()”命令,但据我了解,这会阻塞“侦听器”线程。我需要线程不断监听新客户端。有什么方法可以干净地杀死线程吗?垃圾收集器对此有好处吗?

python multithreading sockets client-server
1个回答
0
投票

好吧,我明白了,看来socket.accept()并没有继承客户端创建的套接字的配置。我需要在服务器端设置超时。我误读了文档。不管怎样,谢谢你。

© www.soinside.com 2019 - 2024. All rights reserved.