Python线程中的 join()
函数可以让主线程等待子线程的完成,直到子线程结束后才继续执行主线程。在使用多线程的时候,我们通常会用到 join
函数来等待所有的子线程都执行完毕,这是一个非常重要的方法。
join()
函数的使用方法如下:
t.join([timeout])
其中,timeout
参数代表阻塞的最大时间,单位为秒。如果设置了 timeout
参数且在 timeout
秒内等待子线程结束,则会在等待结束后立即返回;否则,会一直阻塞等待子线程结束。
以下是一个简单的代码实例:
import threading
import time
def worker():
print('子线程开始执行')
time.sleep(5)
print('子线程执行完毕')
t1 = threading.Thread(target=worker)
t1.start()
t1.join() # 等待t1子线程结束
print('主线程执行完毕')
在这个例子中,我们创建了一个名为 worker
的子线程,并让主线程 join
子线程,主线程会等待子线程执行完毕后才会继续执行,最终输出 主线程执行完毕
。
下面再看一个稍微复杂一些的例子,这个例子中,我们创建了两个子线程 t1
和 t2
,让主线程先等待 t1
执行完毕,然后再继续等待 t2
执行完毕:
import threading
import time
def worker1():
print('子线程 1 开始执行')
time.sleep(2)
print('子线程 1 执行完毕')
def worker2():
print('子线程 2 开始执行')
time.sleep(3)
print('子线程 2 执行完毕')
t1 = threading.Thread(target=worker1)
t2 = threading.Thread(target=worker2)
t1.start()
t2.start()
t1.join()
print('等待子线程 1 执行完毕')
t2.join()
print('等待子线程 2 执行完毕')
print('主线程执行完毕')
在这个例子中,我们让主线程先等待 t1
执行完毕,然后再继续等待 t2
执行完毕,最终输出 主线程执行完毕
。
以上是 join()
函数的作用与用法的完整攻略。在使用 join()
函数的时候,需要注意一下几点:
- 等待的子线程必须先调用
start()
方法,否则会抛出RuntimeError
异常。 join()
函数只能在子线程内调用,否则会抛出RuntimeError
异常。timeout
参数的类型必须为float
或NoneType
,否则会抛出TypeError
异常。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python线程join函数的作用与使用方法 - Python技术站