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循环
最后一个while循环在主线程退出之前等待所有线程完成。在
这是昂贵的检查(100%的CPU为旋转等待)。您可以通过以下两种方法之一改进:
^{1}$或者通过跟踪列表中的所有线程并将它们逐个连接起来:
^{pr2}$基于raymondhettinger的回答:父进程启动多个线程,每个线程都有效。然后我们等待每一个退出,这样我们就可以收集和处理它们的输出。在本例中,每个worker只输出到屏幕,因此父进程只需join()每个任务,以确保它正确运行和退出。在
下面是另一种方法来编写上面的代码。它使用更高级的库
threading
(vsthread
),并且只在当前线程之外的线程上调用join()
。我们还使用threading.enumerate()
,而不是手动跟踪工作线程。在代码:
^{1}$输出示例:
^{pr2}$我们希望在所有孩子完成这项工作之前保持流程的活力。因此,只要有子线程还活着,我们就必须在主线程中继续执行某些操作,因此需要检查
num_threads
变量。在如果不是这样,所有的子线程都会在主线程完成其工作时被终止,而不管它们是否真的完成了它们的工作,所以等待它们是必须的,以确保一切都完成了。在
相关问题 更多 >
编程相关推荐