Python中的threading模块提供了一些线程操作的方法,其中join()是比较常用的一个方法。本篇攻略将详细介绍join()方法的作用以及使用方法。
join()是Thread类中的一个实例方法,其作用是等待所有子线程执行完毕后再继续执行主线程。当主线程调用一个线程的join()方法时,主线程会阻塞等待该线程执行完毕后才继续执行其他操作。
join()方法可以传入一个可选的超时时间参数(timeout),它表示等待的最长时间。如果超时时间到期仍然没有等到子线程执行完毕,则会继续往下执行。
在使用join()方法时,需要首先创建一个子线程对象,并启动子线程。然后在主线程中调用join()方法等待子线程执行完毕。示例如下:
import threading
def task():
print("thread start")
# 模拟子线程执行任务
for i in range(10):
print("task executing...")
print("thread end")
thread = threading.Thread(target=task)
thread.start()
# 等待子线程执行完毕
thread.join()
print("main thread end")
上述代码中,我们通过创建一个子线程,模拟了子线程的执行过程。在主线程中调用join()方法等待子线程执行完毕后,才会继续执行主线程的其他操作。
除了等待单个子线程执行完毕外,我们也可以等待多个子线程执行完毕。示例如下:
import threading
import time
def task(id):
print("thread-%d start" % id)
# 模拟子线程执行任务
for i in range(5):
print("thread-%d executing task-%d" % (id, i))
time.sleep(1)
print("thread-%d end" % id)
# 创建5个子线程
threads = []
for i in range(5):
thread = threading.Thread(target=task, args=(i,))
thread.start()
threads.append(thread)
# 等待所有子线程执行完毕
for thread in threads:
thread.join()
print("main thread end")
上述代码中,我们创建了5个子线程,并启动它们执行任务。然后使用循环调用join()方法等待所有子线程执行完毕。
在使用join()方法时,需要注意以下几点: