如何等待所有线程完成工作?

时间:2017-09-19 13:34:54

标签: python multithreading python-3.x

我有以下脚本(不要参考内容):

import _thread

def func1(arg1, arg2):
    print("Write to CLI")

def verify_result():
    func1()


for _ in range (4):
    _thread.start_new_thread(func1, (DUT1_CLI, '0'))

verify_result()

我想同时执行(比如4个线程) func1(),在我的情况下包括一个可能需要一段时间才能执行的函数调用。然后,只有在最后一个线程完成其工作后,我才想执行 verify_result()

目前,我得到的结果是所有线程都完成了他们的工作,但 verify_result()在所有线程完成工作之前执行。

我甚至尝试在for循环下使用以下代码(当然我导入了线程)但是没有完成工作(不要参考参数)

t = threading.Thread(target = Enable_WatchDog, args = (URL_List[x], 180, Terminal_List[x], '0'))
t.start()
t.join()

2 个答案:

答案 0 :(得分:2)

您的上一个body示例已关闭,但您必须收集列表中的线程,立即启动它们,然后等待它们立即完成所有操作。这是一个简单的例子:

threading

答案 1 :(得分:1)

假设你有一个线程列表。 你循环(each_thread) -

for each_thread in thread_pool:
    each_thread.start()

在循环内开始执行每个线程中的run函数。

同样地,你在之后编写另一个循环,你启动所有线程并拥有

for each_thread in thread_pool:
    each_thread.join()

什么连接做的是它会等待线程i完成执行,然后让第一个线程完成执行。

线程会同时运行,join()只会同步每个线程返回结果的方式。

具体而言,您可以使用join()循环和运行verify_result()功能。