Python 多线程处理:使用 ThreadPoolExecutor 和 as_completed() 等待线程完成
要等待多个线程处理完成,可以使用 concurrent.futures.ThreadPoolExecutor 和 concurrent.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 著作权归作者所有。请勿转载和采集!