Python 使用套接字recv的无限循环杀死线程

Python 使用套接字recv的无限循环杀死线程,python,multithreading,Python,Multithreading,这是一个从主UI分离的线程 def listenReply(self): while True: fromNodeRED = self.nodeRED_sock.recv(1024).decode() print(fromNodeRED) ... listenThread = Thread(target=self.listenReply) listenThread.start() 在通过self.close()关闭应用程序之前,我无法终止它。我试过了

这是一个从主UI分离的线程

def listenReply(self):
    while True:
        fromNodeRED = self.nodeRED_sock.recv(1024).decode()
        print(fromNodeRED)
...

listenThread = Thread(target=self.listenReply)
listenThread.start()
在通过
self.close()
关闭应用程序之前,我无法终止它。我试过了

listenThread.terminate()

应用程序挂起。我真的不知道该怎么做。欣赏任何提示。

您只需将测试从简单的
更改为True
即可,将测试更改为可以更改的变量:

def listenReply(self):
    while self.keepRunning:
        fromNodeRED = self.nodeRED_sock.recv(1024).decode()
        print(fromNodeRED)
...
self.keepRunning = True
listenThread = Thread(target=self.listenReply, daemon=True)
listenThread.start()
...
self.keepRunning = False

不起作用。这只是停止recv,但线程本身仍处于活动状态,并且应用程序无法正常关闭。更新了答案,将
daemon=True
包含到线程中。这将导致线程在关机时突然停止。