如何检查所有打开的线程处理是否完成?

时间:2019-07-03 11:30:39

标签: python-3.x

我想在我的代码中实现一些线程,乍一看似乎运行良好。在检查了我的结果之后,我注意到该代码似乎不是在等待线程完成,而是只要它们开始,它就会继续执行其余的代码。

    def start_local_process(pair):
        try:
            name = 'name'
            some_other_function(name)
        except:
            print("Failed")

    print("Starting a total of %d threading processes." %len(some_list))
    for element in some_list:
        t= Thread(target=start_local_process, args=(pair,))
        t.start()
    print("Closed all threading processes for " + element + "!")

我可以看到它确实为some_list中的每个元素启动了线程处理,这正是我想要的-为每个元素并行执行。但是,启动它们后,我会立即得到最后一条输出消息,我更希望的是,如果它等待它们完成,然后打印一条消息,使其完成。有办法吗?

更新: 因此,这里是link,其中给出了部分解决方案。回答一个线程是否仍处于活动状态的函数是 .isAlive()

使用此功能,我可以知道线程是否仍处于活动状态,但是在所有功能都返回TRUE之前,重新检查同一件事的一种巧妙方法是什么?

1 个答案:

答案 0 :(得分:0)

假设您将线程保存到列表中,则可以执行以下操作来检查所有线程是否都完成了工作:

finished = all(thread.isAlive() for thread in thread_list)
while not finished:
    finished = all(thread.isAlive() for thread in thread_list)
print('All task finished...')