【问题标题】:How to force main thread to close if a sub thread is alive in python? [duplicate]如果子线程在python中还活着,如何强制主线程关闭? [复制]
【发布时间】:2014-06-06 20:07:13
【问题描述】:

如果子线程在python中处于活动状态,如何强制关闭主线程?

sys.exit()exit() 似乎在等待子线程完成?

【问题讨论】:

  • 可能是因为子线程被设置为非守护线程。不确定这是否会阻止执行停止。可能值得研究。如果您使用的是 Threading 模块,则在初始化中有一个选项来确定其守护进程状态。默认情况下,所有线程进程都继承其父线程状态。由于父母是主要的,他们将被设置为非守护进程。要更改此设置,您可以在初始化期间将其设置为 daemon=False。
  • 引用其中一个答案:“如果没有守护线程,您必须跟踪它们并告诉它们退出,然后您的程序才能完全退出。”
  • 我明白了......好吧,这个想法是为了杀死子线程而杀死主线程......这在python中无论如何都可能吗?
  • @user3388884 如果你想让子线程在主线程死掉时也死掉,让你的子线程守护线程:subthread.daemon = True。在对它们调用 start() 之前,您必须将它们设置为守护进程。
  • 您应该查看 SO Is there a way to kill a Thread in Python 上的其他帖子。您将找到问题的所有要素。

标签: python multithreading


【解决方案1】:

把你的子线程变成守护线程。例如:

class SubThread(threading.Thread):
    def __init__(self):
        threading.Thread.__init__(self)
        self.daemon = True # Makes the thread a daemon thread
        ...

或者

subThread = threading.Thread(...)
subThread.daemon = True

当您的程序结束时,所有守护线程都会立即终止。如果子线程不是守护线程,那么它们必须在您的程序结束之前停止。正如 Serge 在评论中提到的那样,“Is there any way to kill a Thread in Python?”谈到了停止线程的方法。

【讨论】:

    【解决方案2】:

    您可能希望将其设置为守护线程。请参阅Daemon Threads Explanation 上有关守护线程的信息。那么它不应该等待该线程完成。

    【讨论】:

    • 非常感谢大家...我完全误解了守护线程的特性。
    • 但是我用什么函数来真正退出主程序呢?我正在使用 sys.exit(),但即使子线程设置为守护进程,它似乎也没有退出主线程...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-09
    • 1970-01-01
    • 1970-01-01
    • 2014-06-19
    • 2021-08-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多