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

2024-04-25 22:09:23 发布

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

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

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(),在我的例子中,它包括一个可能需要时间执行的函数调用。然后,只有在最后一个线程完成其工作后,我才想执行验证\u result()

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

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

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

Tags: import脚本内容forclidefresult线程
2条回答

假设您有一个线程列表。 将(每个_线程)循环到它们上-

for each_thread in thread_pool:
    each_thread.start()

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

同样,在启动所有线程并具有

for each_thread in thread_pool:
    each_thread.join()

join所做的是等待线程i完成执行,然后再让i+1个线程完成执行

线程将并发运行,join()只需同步每个线程返回其结果的方式

具体来说,您可以使用join()循环和运行verify_result()函数

上一个threading示例已经结束,但是您必须收集列表中的线程,一次启动它们,然后等待它们一次完成。下面是一个简化的示例:

import threading
import time

# Lock to serialize console output
output = threading.Lock()

def threadfunc(a,b):
    for i in range(a,b):
        time.sleep(.01) # sleep to make the "work" take longer
        with output:
            print(i)

# Collect the threads
threads = []
for i in range(10,100,10):
    # Create 9 threads counting 10-19, 20-29, ... 90-99.
    thread = threading.Thread(target=threadfunc,args=(i,i+10))
    threads.append(thread)

# Start them all
for thread in threads:
    thread.start()

# Wait for all to complete
for thread in threads:
    thread.join()

相关问题 更多 >