python threading模块进阶之join

join作用

threading.join() join的作用,join所完成的工作就是线程同步,即主线程任务结束之后,进入阻塞状态,一直等待其他的子线程执行结束之后,主线程在终止。

threading.joji利用

关于线程有子线程和父线程 子线程是次要的,父线程是主要的,通俗点讲,程序运行中如果主线程也就是父线程运行完了不管子线程是不是在运行都会结束,这是多线程利用的一个毛病吧。虽然多线程利用使程序加快,但是这是基于你硬件上的追求。如果一个程序使用多线程模块,那么就需要使这个程序完成从小到大的顺序的开始,使主线程开始,让子线程完成任务,然后主线程结束。

案例一

import threading
import time

def td():

    time.sleep(1)
    print('当前线程名字是:'+ threading.current_thread().name)
    time.sleep(1)

if __name__ == '__main__':
    s_time = time.time()

    print('这是主线程:'+ threading.current_thread().name)
    tdg_list= []

    for i in range(5):
        t = threading.Thread(target=td)
        tdg_list.append(t)

    for t in tdg_list:
		t.start()



    print('主线程结束了!' , threading.current_thread().name)
    print('一共用时:', time.time()-s_time)
案例一情况是主线程结束了,子线程还没结束,然后子线程自己运行,明显是错误的!但是不报错

案例二

import threading
import time

def td():

    time.sleep(1)
    print('当前线程名字是:'+ threading.current_thread().name)
    time.sleep(1)

if __name__ == '__main__':
    s_time = time.time()

    print('这是主线程:'+ threading.current_thread().name)
    tdg_list= []

    for i in range(5):
        t = threading.Thread(target=td)
        tdg_list.append(t)

    for t in tdg_list:
        t.setDaemon(True)
        t.start()

    print('主线程结束了!' , threading.current_thread().name)
    print('一共用时:', time.time()-s_time)
案例二情况是主线程结束了,而子线程还没开始,导致子线程没有运行,所以也是错误的。但不报错

案例三

import threading
import time

def td():

    time.sleep(1)
    print('当前线程名字是:'+ threading.current_thread().name)
    time.sleep(1)

if __name__ == '__main__':
    s_time = time.time()

    print('这是主线程:'+ threading.current_thread().name)
    tdg_list= []

    for i in range(5):
        t = threading.Thread(target=td)
        tdg_list.append(t)

    for t in tdg_list:
        t.setDaemon(True)
        t.start()

    for i in tdg_list:
        t.join()

    print('主线程结束了!' , threading.current_thread().name)
    print('一共用时:', time.time()-s_time)
案例三情况正确,使用join。使主线程开始后,在子线程没有结束前,主线程不会结束。

猜你喜欢

转载自blog.csdn.net/weixin_43854835/article/details/89743561