有没有办法强行杀死python中的线程?
Posted
技术标签:
【中文标题】有没有办法强行杀死python中的线程?【英文标题】:Is there a way to forcibly kill a thread in python? 【发布时间】:2021-11-04 14:22:30 【问题描述】:在我的程序中,我有一个线程持续侦听 UDP 套接字,如果它收到任何消息,则将其放入队列中。
其他线程基本上是程序的主要部分。
所以当我想巧妙地终止程序时。所以我想要一种方法来强制(但巧妙地)杀死线程,或者定期从套接字的recv()
出来,以便我可以检查一些状态变量并在需要时退出。
【问题讨论】:
【参考方案1】:强制终止线程通常是不好的做法,应尽可能避免。
根据the docs:
守护线程在关闭时突然停止。他们的资源(例如 如打开的文件、数据库事务等)可能不会被释放 适当地。如果你想让你的线程优雅地停止,让它们 非守护进程并使用合适的信号机制,例如事件。
基于此信息,我建议使用事件关闭线程。这里有一个很好的例子:Is there any way to kill a Thread?
【讨论】:
【参考方案2】:这是我经常使用的:
import threading
class CustomThread(threading.Thread):
def __init__(self, *args, **kwargs):
super(CustomThread, self).__init__(*args, **kwargs)
self._stopper = threading.Event()
def stop(self):
self._stopper.set()
def stopped(self):
return self._stopper.isSet()
def run(self):
while not self.stopped():
"""
The Code executed by your Thread comes here.
Keep in mind that you have to use recv() in a non-blocking manner
"""
if __name__ == "__main__":
t = CustomThread()
t.start()
# ...
t.stop()
【讨论】:
以上是关于有没有办法强行杀死python中的线程?的主要内容,如果未能解决你的问题,请参考以下文章