守护线程与主线程等待子线程

    技术2022-07-17  70

    在执行完主线程后以上程序继续执行子线程的后续内容,并不会立刻退出:

    import threading import time def main(): t1 = threading.Thread(target=demo1) t2 = threading.Thread(target=demo2) t1.start() t2.start() def demo3(): for i in range(3): print('----demo3----') def demo1(): for i in range(3): print(f'----demo1----{i}') time.sleep(1) t3 = threading.Thread(target=demo3) t3.start() def demo2(): for i in range(3): print(f'----demo2----{i}') time.sleep(1) if __name__ == '__main__': main() print('------1--------') #主线程在子线程执行完之前不会结束 ----demo1----0 ----demo2----0 ------1-------- ----demo2----1 ----demo3---- ----demo1----1

    要想在主线程执行完成后立刻结束整个线程,需要:

    def main(): t1 = threading.Thread(target=demo1) t1.setDaemon(True) t2 = threading.Thread(target=demo2) t2.setDaemon(True)#设置为守护线程,主线程结束立刻结束 #属于配置该线程 t1.start() t2.start()

    ----demo1----0 ----demo2----0 ------1--------

    在执行完主线程之后,立刻结束所以的子线程并且结束

    那如果想要让所有子线程结束之后,再向下执行主线程呢? t.join()

    def main(): t1 = threading.Thread(target=demo1) #t1.setDaemon(True) t2 = threading.Thread(target=demo2) #t2.setDaemon(True)#设置为守护线程,主线程结束立刻结束 t1.start() t2.start() t1.join() t2.join()

    在此处,t.join是在线程开始之后进行的,线程开始执行然后进行‘阻塞’,等待线程结束之后再执行主线程

    Processed: 0.016, SQL: 9