setDaemon(True):

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

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

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

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

实例1

import threading #线程
import time 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())) 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())) if __name__ == '__main__':
t1 = threading.Thread(target=Beijing,args=(10,))
t1.setDaemon(True) #setDaemon必须要在start前 t1为守护进程,守护进程是当主线程结束后,不管子线程是否运行完也要跟着结束
t1.start() 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

import threading #线程
import time 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())) 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())) if __name__ == '__main__':
t1 = threading.Thread(target=Beijing,args=(10,))
t1.start() t2 = threading.Thread(target=Shanghai, args=(2,))
t2.setDaemon(True) #t2设置守护线程
t2.start()
print('Done') 运行的结果是:
  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

import threading #线程
import time 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())) 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())) if __name__ == '__main__':
t1 = threading.Thread(target=Beijing,args=(10,))
t1.setDaemon(True) #t1设置守护线程
t1.start() 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 后面还需要执行什么都不等待了,直接结束)

# run():  线程被cpu调度后自动执行线程对象的run方法
# start():启动线程活动。
# isAlive(): 返回线程是否活动的。
# getName(): 返回线程名。
# setName(): 设置线程名。 threading模块提供的一些方法:
# threading.currentThread(): 返回当前的线程变量。
# threading.enumerate(): 返回一个包含正在运行的线程的list。正在运行指线程启动后、结束前,不包括启动前和终止后的线程。
# 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. 基2时域抽取FFT、IFFT的C++实现代码,另附DFT与IDFT的原始实现--转1

    介绍网络上的原理介绍非常丰富,具体请自行搜索网络资源. 本算法依靠FFT流图进行布置. 算法 ##进行完所有的原理推导后,我们可以得到如下的16点FFT流图: 通过上图可以看出整个流图输入序列的顺序已 ...

  2. WCF分布式服务1-核心概念

    参考msdn library for WCF Windows Communication Foundation (WCF) 是用于构建面向服务的应用程序的框架. 借助 WCF,可以将数据作为异步消息从 ...

  3. 机器视觉:SSD Single Shot MultiBox Detector

    今天介绍目标检测中非常著名的一个框架 SSD,与之前的 R-CNN 系列的不同,而且速度比 YOLO 更快. SSD 的核心思想是将不同尺度的 feature map 分成很多固定大小的 box,然后 ...

  4. iOS 多语言的实现(本地化和国际化)

    配置需要国际化的语言 配置需要国际化的语言,这也是国际化之前的准备工作,无论我们是国际化App名称.代码中的字符串.图片.还是storyboard和xib,都需要进行这一步的准备工作(一个项目中需要且 ...

  5. JavaBasic_12

    类 抽象:对象的共性 类:产生对象的模板(对于属性来讲,类规定有没有属性以及属性类型,具体的属性值因对象的不同而不同) 数据类型:数据集及基于这个数据集的操作 类:我们自定义类型(定义成员变量,基于数 ...

  6. lua经典问题

    lua是一门比较简单的脚本语言,但是有些问题经常碰到,在这里总结一下: 1 lua 传参,如果参数是table,则相当于传引用 2 lua中只有nil和false返回假 3 lua and 和 or ...

  7. 熟悉基本的Linux文件系统命令

      修改配置是以后工作中必然经历的,要做好基础工作,两天的学习也说明了在Linux系统中修改配置的重要性,多看多学习. 每周总结学习和经验到网站上,坚持1w个小时,加油! Linux的安装环境 cen ...

  8. tomcat8.5配置redis实现session共享(tomcat-redis-session-manager-master)

    1.将下面几个jar包依赖放到tomcat的lib目录下: 2.修改tomcat/conf下context.xml文件,在<Context>节点添加如下代码: <Valve clas ...

  9. 备忘:EBS参考链接

    帮助手册查阅网址http://docs.oracle.com/cd/V46499_01/current/html/docset.html  官方 http://www.oracleappshub.co ...

  10. WebForm AnyWay

    项目地址 :  https://github.com/kelin-xycs/WebFormAnyWay WebForm AnyWay 用 WebForm 构建 简洁高效 的 Web 应用 WebFor ...