import threading
def spin(*args):
pass
#创建线程
spinner = threading.Thread(target=spin, args=('thinking!', signal))
#启动线程
spinner.start()
#等待线程结束
spinner.join(timeout=None)
作用:等待线程运行结束,阻塞当前的线程,直至被调用的线程结束运行。
具体来说,假定当前线程为main,main需要调用另外一个线程thread,那么应该使用main.join(thread)
,此时join()方法会阻塞main线程,直至线程thread运行结束。这么做可以保证main线程之间的顺序控制关系。
这个函数能够阻塞线程的调用方直到线程的join方法得到终止的信号。在以下三种情况下会收到终止信号
- 线程正常结束
- 线程运行过程中遇到无法处理的异常
- 线程分配的时间用完
若想要指定线程运行的时间,可以显示的给出timeout参数,timeout参数的单位为秒。join()函数的返回值总是为None,因此如果需要确定timeout时间点之后线程是否依然在运行,可以调用my_thread.isAlive(),返回值False表示运行结束
若没有显示给定timeout参数,将默认等待直至线程运行结束(正常结束或者遇到无法处理的异常而退出运行)
假定当前线程为thread1,调用thread1.join(thread1),即线程对自身调用join方法,join()方法会抛出RuntimeError。另外一个错误的用法是:当前线程thread1对还没启动的线程thread2调用join()方法,这种情况下也会报运行时错误。