为什么在python中使用while1:pass-in线程

2024-05-20 17:10:40 发布

您现在位置:Python中文网/ 问答频道 /正文

from thread import start_new_thread

num_threads = 0
def heron(a):
    global num_threads
    num_threads += 1

    # code has been left out, see above
    num_threads -= 1
    return new

start_new_thread(heron,(99,))
start_new_thread(heron,(999,))
start_new_thread(heron,(1733,))
start_new_thread(heron,(17334,))

while num_threads > 0:
    pass

这是线程的简单代码,我想在最后一行中知道为什么要使用while循环


Tags: fromimportnewdefcodeleftglobalthread
3条回答

最后一个while循环在主线程退出之前等待所有线程完成。在

这是昂贵的检查(100%的CPU为旋转等待)。您可以通过以下两种方法之一改进:

^{1}$

或者通过跟踪列表中的所有线程并将它们逐个连接起来:

^{pr2}$

基于raymondhettinger的回答:父进程启动多个线程,每个线程都有效。然后我们等待每一个退出,这样我们就可以收集和处理它们的输出。在本例中,每个worker只输出到屏幕,因此父进程只需join()每个任务,以确保它正确运行和退出。在

下面是另一种方法来编写上面的代码。它使用更高级的库threading(vsthread),并且只在当前线程之外的线程上调用join()。我们还使用threading.enumerate(),而不是手动跟踪工作线程。在

代码:

^{1}$

输出示例:

^{pr2}$

我们希望在所有孩子完成这项工作之前保持流程的活力。因此,只要有子线程还活着,我们就必须在主线程中继续执行某些操作,因此需要检查num_threads变量。在

如果不是这样,所有的子线程都会在主线程完成其工作时被终止,而不管它们是否真的完成了它们的工作,所以等待它们是必须的,以确保一切都完成了。在

相关问题 更多 >