TOP

深入理解Python线程中join()函数(二)
2019-04-01 00:08:58 】 浏览:183
Tags:深入 理解 Python 线程 join 函数

nbsp; i.join()
    print('全搞定了.......')


结果跟我们预期的一样,thread_2还没’呱‘完和打印‘Thread_2 end’,主线程就说“全搞定了........”:


深入理解Python线程中join()函数


我们现在决定让守护线程变得“重要起来”,所以使用join(),强制让守护线程在主线程之前结束:


import threading


def Thread_1(num):
    print('Thread_1 start')
    for i in range(num):
        print('喵')
    print('Thread_1 end')


def Thread_2(num):
    print('Thread_2 start')
    for i in range(num):
        print('呱')
    print('Thread_2 end')


if __name__ == '__main__':
    thread_list = []
    thread_1 = threading.Thread(target=Thread_1, args=(3,))
    thread_2 = threading.Thread(target=Thread_2, args=(3,))
    thread_1.daemon = True
    thread_2.daemon = True
    thread_list.append(thread_1)
    thread_list.append(thread_2)
    for i in thread_list:
        i.start()
    for i in thread_list:
        i.join()
    print('全搞定了.......')


果然是可以的,直接就把守护线程拉到了主线程之前完成:


深入理解Python线程中join()函数


其实join()还可以加个参数,让主线程等待多久,如果等了那么长时间守护线程还不结束那么主线程就要强制关闭了:


import threading
import time


def Thread_1(num):
    print('Thread_1 start')
    for i in range(num):
        time.sleep(5)
        print('喵')
    print('Thread_1 end')


if __name__ == '__main__':
    thread_1 = threading.Thread(target=Thread_1, args=(3,))
    thread_1.daemon = True
    thread_1.start()
    thread_1.join(6)
    print('全搞定了.......')


我这里主线程只给你6秒的时间,你“喵”一次就5秒,6秒一到我就不管你直接结束了,所以得到的结果应该是只能“喵”一次。


深入理解Python线程中join()函数


那不是守护线程使用join(6)会怎么样呢?由于普通子线程地位很高啊...所以哪怕是等了6秒,主线程继续执行自己的代码后,到最后还是会慢慢执行子线程的代码直到结束,是不是很气人……


总的来说join()方法可以提升守护线程地位以及设置主线程等待子线程的时间。普通线程跟守护线程就很像你女票和普通人,假设你是主线程,你等女票的时候,无论女票多晚到你都得等她,但是你等普通人的时候你就可以说我有事先溜了。如果讲的这么清楚你还是听不懂的话那只能说明一个问题:你没有女票!



深入理解Python线程中join()函数(二) https://www.cppentry.com/bencandy.php?fid=54&id=216718

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Python Turtle绘制漂亮彩色螺旋线.. 下一篇Python之lambda 函数理解