【问题标题】:explicit joining of python threads?python线程的显式加入?
【发布时间】:2010-06-21 20:55:26
【问题描述】:

我需要在 python 程序中启动一些线程。线程执行可能需要很长时间的后台任务,所以我不想阻塞等待任务发生的主线程。

Python 提供了使用 Thread.join() 和 Thread.isAlive() 'reap' 线程的能力。但我实际上并不关心找出线程何时完成。我满足于启动线程,让它做它的事情,再也不用担心它了。

问题是,我是否需要保留对我启动的 Thread 对象的引用,以便以后可以加入()它们?或者我可以让对 Thread 对象的引用超出范围而不用担心吗?在这种情况下有什么“正确”的做法吗?

【问题讨论】:

    标签: multithreading background python


    【解决方案1】:

    您不必显式地join 线程——只要确保它们没有被“守护”(将它们的daemon 属性保留为默认值False),这样它们就会保持进程处于活动状态,直到他们都完成了(如果你让你的线程守护进程,那么你必须确保在所有相关线程都完成之前主线程不会终止,否则线程将被操作系统杀死)。

    我认为正确的做法是最简单的:忘记你的“后台线程”,让它们成为非守护进程(毕竟这是它们的默认状态)。

    【讨论】:

    • 但是,如果你不join()它们(不管它们的守护进程),线程是否会保持类似僵尸的状态?
    猜你喜欢
    • 2023-02-26
    • 2011-03-10
    • 1970-01-01
    • 1970-01-01
    • 2016-06-13
    • 1970-01-01
    • 2011-05-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多