要等待多个线程处理完成,可以使用 concurrent.futures.ThreadPoolExecutorconcurrent.futures.as_completed

首先,创建一个 ThreadPoolExecutor 对象,设置线程池的大小:

import concurrent.futures

executor = concurrent.futures.ThreadPoolExecutor(max_workers=5)

然后,使用 submit() 方法将任务提交给线程池,并将返回的 Future 对象添加到一个列表中:

futures = []
for i in range(10):
    future = executor.submit(my_function, i)
    futures.append(future)

在这个例子中,我们将 my_function() 函数的参数 i 作为任务提交给线程池,并将返回的 Future 对象添加到 futures 列表中。

最后,可以使用 as_completed() 函数来迭代 futures 列表,并等待每个线程处理完成:

for future in concurrent.futures.as_completed(futures):
    result = future.result()
    # 处理返回的结果

as_completed() 函数会返回一个迭代器,它将按照线程完成的顺序返回 futures 列表中的 Future 对象。我们可以使用 result() 方法获取线程处理的结果,然后进行相应的处理。

完整的代码示例:

import concurrent.futures

def my_function(i):
    # 处理任务的函数
    return i * i

executor = concurrent.futures.ThreadPoolExecutor(max_workers=5)

futures = []
for i in range(10):
    future = executor.submit(my_function, i)
    futures.append(future)

for future in concurrent.futures.as_completed(futures):
    result = future.result()
    print(result)

这样,程序将等待所有线程处理完成后,才会继续执行后续的代码。


原文地址: https://www.cveoy.top/t/topic/p4P1 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录