setDaemon(True):

将线程声明为守护线程,必须在start() 方法调用之前设置, 如果不设置为守护线程程序会被无限挂起。这个方法基本和join是相反的。

当我们 在程序运行中,执行一个主线程,如果主线程又创建一个子线程,主线程和子线程 就分兵两路,分别运行,那么当主线程完成

想退出时,会检验子线程是否完成。如 果子线程未完成,则主线程会等待子线程完成后再退出。但是有时候我们需要的是 只要主线程

完成了,不管子线程是否完成,都要和主线程一起退出,这时就可以 用setDaemon方法啦

实例1

  1. import threading #线程
    import time
  2.  
  3. def Beijing(n):
    print('Beijing time is start %s' % time.strftime('%Y-%m-%d %X', time.localtime()))
    time.sleep(2)
    print('Beijing time is over %s' % time.strftime('%Y-%m-%d %X', time.localtime()))
  4.  
  5. def Shanghai(n):
    print('Shanghai time is start %s' %time.strftime('%Y-%m-%d %X',time.localtime()))
    time.sleep(5)
    print('Shanghai time is over %s' %time.strftime('%Y-%m-%d %X',time.localtime()))
  6.  
  7. if __name__ == '__main__':
    t1 = threading.Thread(target=Beijing,args=(10,))
    t1.setDaemon(True) #setDaemon必须要在start前 t1为守护进程,守护进程是当主线程结束后,不管子线程是否运行完也要跟着结束
    t1.start()
  8.  
  9. t2 = threading.Thread(target=Shanghai, args=(2,))
    t2.start()
    print('Done')

运行结果:

  Beijing time is start 2018-05-29 20:13:43
  Shanghai time is start 2018-05-29 20:13:43
  Done
  Beijing time is over 2018-05-29 20:13:45
  Shanghai time is over 2018-05-29 20:13:48

#t1 设置守护进程,运行还是会正常方式运行,因为下面还有t2在运行;主线程不会结束

实例2

  1. import threading #线程
    import time
  2.  
  3. def Beijing(n):
    print('Beijing time is start %s' % time.strftime('%Y-%m-%d %X', time.localtime()))
    time.sleep(2)
    print('Beijing time is over %s' % time.strftime('%Y-%m-%d %X', time.localtime()))
  4.  
  5. def Shanghai(n):
    print('Shanghai time is start %s' %time.strftime('%Y-%m-%d %X',time.localtime()))
    time.sleep(5)
    print('Shanghai time is over %s' %time.strftime('%Y-%m-%d %X',time.localtime()))
  6.  
  7. if __name__ == '__main__':
    t1 = threading.Thread(target=Beijing,args=(10,))
    t1.start()
  8.  
  9. t2 = threading.Thread(target=Shanghai, args=(2,))
    t2.setDaemon(True) #t2设置守护线程
    t2.start()
    print('Done')
  10.  
  11. 运行的结果是:
      Beijing time is start 2018-05-29 20:16:04
      Shanghai time is start 2018-05-29 20:16:04
      Done
      Beijing time is over 2018-05-29 20:16:06
    #Shanghai 函数最后没打印结束,是因为,t2设置了守护进程,当运行到print('Done')的时候,主线程结束了,这时候守护进程也跟着结束了

实例3

  1. import threading #线程
    import time
  2.  
  3. def Beijing(n):
    print('Beijing time is start %s' % time.strftime('%Y-%m-%d %X', time.localtime()))
    time.sleep(2)
    print('Beijing time is over %s' % time.strftime('%Y-%m-%d %X', time.localtime()))
  4.  
  5. def Shanghai(n):
    print('Shanghai time is start %s' %time.strftime('%Y-%m-%d %X',time.localtime()))
    time.sleep(5)
    print('Shanghai time is over %s' %time.strftime('%Y-%m-%d %X',time.localtime()))
  6.  
  7. if __name__ == '__main__':
    t1 = threading.Thread(target=Beijing,args=(10,))
    t1.setDaemon(True) #t1设置守护线程
    t1.start()
  8.  
  9. t2 = threading.Thread(target=Shanghai, args=(2,))
    t2.setDaemon(True) #t2设置守护线程
    t2.start()
    print('Done')

运行结果是

  Beijing time is start 2018-05-29 20:20:30
  Shanghai time is start 2018-05-29 20:20:30
  Done

  #程序运行到print('Done')主线程已经结束了,t1 t2 都是守护线程,也跟着结束了(t1  t2 后面还需要执行什么都不等待了,直接结束)

  1. # run(): 线程被cpu调度后自动执行线程对象的run方法
  2. # start():启动线程活动。
  3. # isAlive(): 返回线程是否活动的。
  4. # getName(): 返回线程名。
  5. # setName(): 设置线程名。
  6.  
  7. threading模块提供的一些方法:
  8. # threading.currentThread(): 返回当前的线程变量。
  9. # threading.enumerate(): 返回一个包含正在运行的线程的list。正在运行指线程启动后、结束前,不包括启动前和终止后的线程。
  10. # threading.activeCount(): 返回正在运行的线程数量,与len(threading.enumerate())有相同的结果。

setDaemon 守护线程的更多相关文章

  1. python笔记9-多线程Threading之阻塞(join)和守护线程(setDaemon)

    python笔记9-多线程Threading之阻塞(join)和守护线程(setDaemon) 前言 今天小编YOYO请xiaoming和xiaowang吃火锅,吃完火锅的时候会有以下三种场景: - ...

  2. 守护线程,需要通过调用线程方法:setDaemon(boolean on)来进行设置

    package seday08.thread;/*** @author xingsir * 守护线程又称为后台线程,默认创建出来的线程都是普通线程, 守护线程需要通过调用线程方法:setDaemon( ...

  3. Java中守护线程的总结 thread.setDaemon(true)

    https://www.cnblogs.com/ziq711/p/8228255.html 在Java中有两类线程:User Thread(用户线程).Daemon Thread(守护线程) 用个比较 ...

  4. daemon(守护、服务员)-t1.setDaemon(true) - 设置为守护线程

    daemon(守护.服务员)t1.setDaemon(true) - 设置为守护线程 class KTV extends Thread{ public void run(){ try { Thread ...

  5. python守护线程t.setDaemon(True)

    守护线程是守护主线程  t.setDaemon(True),调用函数里面存在等待时间时,只要设置了守护线程,函数中等待时间下面的代码都不会再执行

  6. 多线程-守护线程-setDaemon

    1 package multithread4; 2 /* 3 * 停止线程: 4 * 1,stop方法. 5 * 6 * 2,run方法结束. 7 * 8 * 怎么控制线程的任务结束呢? 9 * 任务 ...

  7. Java守护线程

    最近的项目使用的是dubbo.Web工程发布在Tomcat上,会作为消费者调用其他的dubbo微服务.但是最近发现一个问题,在使用shutdown命令关闭tomcat的时候,Tomcat并没有真正关闭 ...

  8. java线程 - 多线程 - 守护线程

    1.多线程执行者/处理类 都是Runnable的实现类(如自定义类实现Runnable 或 java原生的Thread.FutureTask),但最后都必须封装成Thread线程类由Thread.st ...

  9. python守护线程

    如果你设置一个线程为守护线程,就表示你在说这个线程是不重要的,在进程退出的时候,不用等待这个线程退出.如果你的主线程在退出的时候,不用等待那些子线程完成,那就设置这些线程的daemon属性.即在线程开 ...

随机推荐

  1. re模块+面向对象

    re模块 re:其实就是带有特殊语法的字符串 语法:单个字符和多个字符 单个字符: \d是匹配所有的数字 \D是匹配所有的非数字 \s是所有的换行符,制表符,空白等,回车符 \S是所有费换行符,空白和 ...

  2. Fiddler常用命令

    几个常用的命令行方法使用: 查找对应响应码的数据包或请求类型的数据包: 输入“=post”将选择post的数据包并用蓝色底标色 输入:=502 查找服务器返回是图片类型的请求 输入 select im ...

  3. css 长用点

    功能 :     font-size: 0;        去除图片之间空白空隙

  4. django 简易版搭建

    1.根目录下创建mysql.cnf文件 [client]database = identimguser = rootpassword = roothost = 127.0.0.1port = 3306 ...

  5. Linux学习之路——文件查找:find

    使用权限:所有角色 用法:find [ options ] [ expression ]( find path -expression [ -print ] [ -exec | -ok command ...

  6. 使用loadrunner监控apcahe

    一般要修改的内容在Httpd.conf文件中已经存在,如果不存在请自行添加相应内容. (1)修改Apache中Httpd.conf文件, (2)添加ExtendedStatus,设置ExtendedS ...

  7. SQL-存储过程-010

    什么是存储过程? 可以理解为数据库中的方法,与C#中的方法一样,具有参数和返回值: 存储过程的优点? 提高运行速度:存储过程在创造是进行编译,以后运行存储过程都不需要再进行编译,极大化的提高了数据库的 ...

  8. Spring各个jar包作用

    Spring AOP:Spring的面向切面编程,提供AOP(面向切面编程)的实现Spring Aspects:Spring提供的对AspectJ框架的整合Spring Beans:Spring IO ...

  9. mysql 分组排序前n + 长表转宽表

    MySQL数据库优化的八种方式(经典必看) 建表 CREATE TABLE if not EXISTS `bb` ( `id` int not null primary key auto_increm ...

  10. Linux Capability探索实验

    Linux内核从2.1版本开始,就开始支持Capabilities的安全机制.Capabilities安全机制提出的目的在于实现系统特权操作的更加细粒度的访问控制,使用户能够根据实际的安全需求来控制r ...