How to force main thread to close if a sub thread is alive in python?
如果一个子线程在python中是活动的,如何强制关闭主线程?
sys.exit()和exit()似乎在等待子线程完成?
- 型可能是因为子线程被设置为非守护进程线程。但不确定这是否会阻止执行停止。可能值得一看。如果您正在使用线程模块,那么在初始化中有一个选项可以确定其守护进程状态。默认情况下,所有线程进程都继承其父线程状态。因为父进程是主进程,所以它们将被设置为非守护进程。要更改此设置,您可以在初始化期间将其设置为daemon=false。
- 型引用其中一个答案:"如果没有守护进程线程,在程序完全退出之前,您必须跟踪它们,并告诉它们退出。"
- 型我懂了。。。好吧,想法是杀死主线程,以便杀死子线程…这在python中是可能的吗?
- 型@用户33888884如果希望子线程在主线程死亡时死亡,请使子线程守护进程线程:subthread.daemon = True。在调用start()之前,必须将它们设置为守护进程。
- 型你应该看看这篇文章中的另一篇,所以有没有一种方法可以杀死Python中的线程。您将找到问题的所有元素。
- 型谢谢你的建议…我可能会在那个链接下找到我的解决方案…@据我所知,如果主线程死了,什么时候守护进程线程不会死?
将子线程转换为守护进程线程。例如:
1 2 3 4 5
| class SubThread(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
self.daemon = True # Makes the thread a daemon thread
... |
或
1 2
| subThread = threading.Thread(...)
subThread.daemon = True |
当程序结束时,所有守护进程线程都将立即死亡。如果子线程不是守护进程线程,那么必须在程序结束之前停止它们。正如Serge在评论中提到的,"有没有办法在python中杀死线程?"讨论如何停止线程。
您可能希望将其设置为守护进程线程。有关守护进程线程的信息,请参阅守护进程线程解释。那么它不应该等待线程完成。
- 非常感谢大家…我完全误解了守护进程线程的特性。
- 但是我使用什么函数来实际退出主程序呢?我正在使用sys.exit(),但它似乎不退出主线程,即使子线程设置为守护进程…