Python多线程中主线程等待所有子线程结束的方法
发布时间:2023-05-16 09:51:05
Python是一种简单易学、可拓展性强的编程语言,它提供了多线程编程的支持。多线程编程允许程序同时执行多个线程,在程序中实现并发的操作,以提高程序的效率。在多线程编程中,主线程必须等待所有子线程结束之后再结束。否则,子线程可能会在主线程结束之前独立运行。下面讲一下Python多线程中主线程等待所有子线程结束的方法。
Python多线程中有两种常见的方法来实现主线程等待所有子线程结束。
方法一:使用join()方法
join()方法是Python多线程中等待子线程完成的最简单的方法。
调用子线程的join()方法会使主线程被阻塞,直到子线程完成。join()方法有两种调用方式:
1. join()
调用子线程的join()方法时,主线程将被阻塞,直到子线程完成。
例如:
import threading
import time
def run():
print('子线程开始')
time.sleep(2)
print('子线程结束')
t = threading.Thread(target=run)
t.start()
t.join()
print('主线程结束')
输出结果:
子线程开始 子线程结束 主线程结束
2. join(timeout)
调用子线程的join(timeout)方法时,主线程将被阻塞,直到子线程完成或超时。如果子线程在超时之前完成,则join()方法返回True。如果超时时间到达但子线程尚未完成,则join()方法返回False。
例如:
import threading
import time
def run():
print('子线程开始')
time.sleep(1)
print('子线程结束')
t = threading.Thread(target=run)
t.start()
if t.join(2):
print('子线程完成')
else:
print('子线程未完成')
print('主线程结束')
输出结果:
子线程开始 子线程结束 子线程完成 主线程结束
方法二:使用线程池
线程池是一种用于管理多个线程的技术。在Python中,可以通过ThreadPoolExecutor类来创建一个线程池。
实现主线程等待所有子线程结束的方法是:
1. 创建ThreadPoolExecutor对象时,指定线程池中最大的线程数。
2. 使用submit()方法向线程池中添加线程。
3. 调用shutdown()方法,等待所有线程完成。
例如:
import concurrent.futures
import time
def run():
print('子线程开始')
time.sleep(2)
print('子线程结束')
executor = concurrent.futures.ThreadPoolExecutor(max_workers=2)
futures = []
for i in range(2):
futures.append(executor.submit(run))
concurrent.futures.wait(futures)
print('主线程结束')
输出结果:
子线程开始 子线程开始 子线程结束 子线程结束 主线程结束
以上就是Python多线程中主线程等待所有子线程结束的两种方法。无论使用哪种方法,主线程必须等待所有子线程结束,才能保证程序正确地执行。
