码迷,mamicode.com
首页 > 编程语言 > 详细

守护线程

时间:2018-05-31 19:35:23      阅读:247      评论:0      收藏:0      [点我收藏+]

标签:哈哈   执行   class   睡眠   实例化   需要   超过   range   done   

守护线程

守护线程:只要主线程结束,那么子线程立即结束,不管子线程有没有运行完成。

1、未加守护线程:先运行主线程先打印:“Done,运行完成”,然后继续休眠3秒子线程启动打印“哈哈哈”。

import threading,time
def run():
    time.sleep(3)
    print(哈哈哈)
for i in range(5):
    t = threading.Thread(target=run)
    t.start()
print(Done,运行完成。)
#先运行主线程,先打印,Done,运行完成。,然后运行线程,先等待三秒之后,启动子线程
#结果
Done,运行完成。
哈哈哈
哈哈哈
哈哈哈
哈哈哈
哈哈哈

 

2、加了守护线程:setDaemon(True)#把子线程设置成守护线程

主线程执行完成之后,子线程跟着结束,所有没有打印哈哈哈哈哈

import  threading,time

def run():
    time.sleep(3)#需要3秒
    print(哈哈哈哈哈)
for i in range(5):
    t=threading.Thread(target=run)#实例化一个线程
    t.setDaemon(True)#把子线程设置成守护线程
    t.start()
print(Done,运行完成。)
#结果:
Done,运行完成。

3、主线程设置睡眠时间睡眠时间:

import  threading,time
def run():
    time.sleep(3)#需要3秒
    print(哈哈哈哈哈)
for i in range(5):
    t=threading.Thread(target=run)#实例化一个线程
    t.setDaemon(True)#把子线程设置成守护线程
    t.start()
print(Done,运行完成。)
time.sleep(3)

#结果
Done,运行完成。
哈哈哈哈哈
哈哈哈哈哈
哈哈哈哈哈

注意:为什么上述代码只输出可三条“哈哈哈哈哈”?

原因:主线程设置睡眠时间3秒,子线程的睡眠时间也刚好三秒,刚好能启动子线程,但是子线程启动之后不一定所有的子线程都能执行完,有些子线程可能还是执行完就已经结束

1、如果主线程设置睡眠时间为2秒,主线程完成2秒后,还没等到子线程3秒启动,就结束,也只会打印:Done,运行完成。

import  threading,time
def run():
    time.sleep(3)#需要3秒
    print(哈哈哈哈哈)
for i in range(5):
    t=threading.Thread(target=run)#实例化一个线程
    t.setDaemon(True)#把子线程设置成守护线程
    t.start()
print(Done,运行完成。)
time.sleep(2)
#结果:
Done,运行完成。

2、如果主线程的睡眠时间超过子线程执行完成时间,那么子线程可以完全执行完:

import  threading,time
def run():
    time.sleep(3)#需要3秒
    print(哈哈哈哈哈)
for i in range(5):
    t=threading.Thread(target=run)#实例化一个线程
    t.setDaemon(True)#把子线程设置成守护线程
    t.start()
print(Done,运行完成。)
time.sleep(4)
#结果
Done,运行完成。
哈哈哈哈哈
哈哈哈哈哈
哈哈哈哈哈
哈哈哈哈哈
哈哈哈哈哈

 

守护线程

标签:哈哈   执行   class   睡眠   实例化   需要   超过   range   done   

原文地址:https://www.cnblogs.com/hwtfamily/p/9117893.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!