温馨提示:本文翻译自stackoverflow.com,查看原文请点击:python 3.x - How to check if all opened threading processes are finished?
python-3.x

python 3.x - 如何检查所有打开的线程处理是否完成?

发布于 2020-03-27 10:17:35

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

    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中的每个元素启动了线程处理,这正是我想要的-对每个元素并行执行。但是,启动它们后,我会立即得到最后一条输出消息,我希望的是,如果它等待它们完成,然后打印一条消息,使其完成。有办法吗?

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

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

查看更多

查看更多

提问者
CroatiaHR
被浏览
222
devaerial 2019-07-03 21:12

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

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...')