python线程API:join()

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()方法,这种情况下也会报运行时错误。

你可能感兴趣的:(python)