在不使用thread.join()的情况下等待所有线程执行完毕,可以使用以下方法:
import concurrent.futures
# 创建线程池
thread_pool = concurrent.futures.ThreadPoolExecutor()
# 提交线程任务给线程池执行
thread_pool.submit(task1)
thread_pool.submit(task2)
thread_pool.submit(task3)
# 关闭线程池,不再接受新的任务
thread_pool.shutdown()
# 等待所有线程执行完毕
thread_pool.awaitTermination()
import threading
# 创建计数器
counter = threading.Event()
counter.set() # 设置初始值为线程数量
# 线程函数
def thread_func():
# 线程执行任务
# ...
# 线程执行完毕,计数器减1
counter.wait()
counter.clear()
# 创建线程
thread1 = threading.Thread(target=thread_func)
thread2 = threading.Thread(target=thread_func)
thread3 = threading.Thread(target=thread_func)
# 启动线程
thread1.start()
thread2.start()
thread3.start()
# 等待所有线程执行完毕
counter.wait()
这两种方法都可以在不使用thread.join()的情况下等待所有线程执行完毕。使用线程池可以更方便地管理线程,而使用计数器则更加灵活,适用于不同的线程数量和执行方式。
领取专属 10元无门槛券
手把手带您无忧上云