多线程编程当中, 线程的存在形态比较抽象. 通过前台线程后台线程, 可以有效理解线程运行顺序.(复杂的多线程程序可以通过设置线程优先级实现)

后台线程与前台线程的直接区别是,

1)setDaemon(True): 当主线程退出时,后台线程随机退出;

2)setDaemon(False)(默认情况): 当主线程退出时,若前台线程还未结束,则等待所有线程结束,相当于在程序末尾加入join().

实例:

例子描述:主线程调用giveures给出字符串s的md5摘要,同时在giveures当中启动一个线程打印字符串内容.

1.前台线程

import time

from hashlib import md5

from threading import Thread

def pmd(md):

time.sleep(3) #使用sleep使得该线程比主线程晚结束

print("backend recording:",md)

def giveures(s):

md = md5(s.encode("utf-8"))

res = md.digest()

t = Thread(target=pmd,args=(s,))

#t.setDaemon(True) 默认情况:t.setDaemon(False)

t.start()

return res

s = "chrisyang"

res = giveures(s)

print(res)

exit()

运行结果:

b"h#x86|xa0xeffxc7uxbax18xb2xd2sxf9x9e"

backend recording: chrisyang

第一行打印出来之后,隔3s后打印出第二行,说明在等待pmd线程结束后进程才退出.

2.后台线程

import time

from hashlib import md5

from threading import Thread

def pmd(md):

time.sleep(3) #使用sleep使得该线程比主线程晚结束

print("backend recording:",md)

def giveures(s):

md = md5(s.encode("utf-8"))

res = md.digest()

t = Thread(target=pmd,args=(s,))

t.setDaemon(True)

t.start()

return res

s = "chrisyang"

res = giveures(s)

print(res)

exit()

运行结果:

b"h#x86|xa0xeffxc7uxbax18xb2xd2sxf9x9e"

pmd线程因为sleep挂起一段时间,因此在主线程完成时还未结束就被强制退出了.

知识归纳:

以上的是前后台线程的外在区别,至于内在区别,转自Stack Overflow的一个精炼回答:

后台线程的责任是为整个主线程提供服务,如保持网络连接(发送keep-alive心跳包),负责内存管理与垃圾回收(实际上JVM就是这样做的). 因此这些线程与实际提供应用服务的线程有了逻辑上的”前/后”的概念,而如果主线程已经退出,那么后台线程也没有存在的必要.

如果没有这一机制,那么我们在主线程完成之后,还必须逐个地检查后台线程,然后在主线程退出之前,逐个地关闭它们. 有了前后线程的区分, 我们只需要负责管理前台线程, 完成主要的逻辑处理之后退出即可.

原文:

Daemon Threads Explanation

以上这篇python使用Thread的setDaemon启动后台线程教程就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持云海天教程。

python 多线程 setdaemon_python使用Thread的setDaemon启动后台线程教程相关推荐

  1. python使用Thread的setDaemon启动后台线程

    多线程编程当中, 线程的存在形态比较抽象. 通过前台线程\后台线程, 可以有效理解线程运行顺序.(复杂的多线程程序可以通过设置线程优先级实现) 后台线程与前台线程的直接区别是, 1)setDaemon ...

  2. python 多线程 setdaemon_python多线程之t.setDaemon(True) 和 t.join()

    0.目录 1.参考 2.结论 (1)通过 t.setDaemon(True) 将子线程设置为守护进程(默认False),主线程代码执行完毕后,python程序退出,无需理会守护子线程的状态. (2) ...

  3. Python 多线程中的 join() 和 setDaemon()

    Demo 是最好的老师!!! 参考链接:Python多线程与多线程中join()的用法 - cnkai - 博客园 知识点一(setDaemon(False)): 当一个进程启动之后,会默认产生一个主 ...

  4. python多线程文件的数据续传_python38 1.线程一堆队列 2.事件Event 3.协程 4.断点续传...

    复习 1.GIL锁 2.如何避免GIL锁给程序带来的效率影响 3.与自定义锁的区别 4. 线程池进程池 5 同步 异步 6.异步回调 1.GIL锁 ​ 全局解释器锁, 用来锁住解释器的互斥锁 ​ 为啥 ...

  5. Python 多线程、守护进程、同时运行最大线程数、锁、线程阻塞(线程暂停和继续)

    python 多线程的使用笔记 1.多线程的基本用法 (1)简单任务多线程的开启方式 from threading import Thread import timedef target(name, ...

  6. Python多线程编程基础1:为什么要使用线程

    多线程技术的引入并不仅仅是为了提高处理速度和硬件资源利用率,更重要的是可以提高系统的可扩展性(采用多线程技术编写的代码移植到多处理器平台上不需要改写就能立刻适应新的平台,可以也可以简单地通过增加处理器 ...

  7. python 多线程 setdaemon_Python多线程join和setDaemon区别与用法

    一直没有太搞清楚join和setDaemon有什么区别,总是对于它们两个的概念很模糊,需要做个实验然后记录一下. 先说结论: join: 子线程合并到主线程上来的作用,就是当主线程中有子线程join的 ...

  8. python 多线程 setdaemon_Python线程join和setDaemon

    看一下线程的setDaemon()方法 importtimeimportthreadingimportctypesimportinspectdefsayHello():for i in range(1 ...

  9. python多线程调度_python并发编程之进程、线程、协程的调度原理(六)

    进程.线程和协程的调度和运行原理总结. 系列文章 进程.线程的调度策略介绍 linux中的进程主要有三种调度策略: 优先级调度:将进程分为普通进程和实时进程: 先进先出(队列)调度:实时进程先创建的先 ...

最新文章

  1. Windows Server中的故障转移群集的实现机制
  2. DNSSEC 原理、配置与布署简介
  3. Windows 技术篇 - win10复制文件或文件夹时出错,提示“文件或目录损坏且无法读取“问题解决。windows驱动器、磁盘修复方法
  4. msg: ReferenceError: Can't find variable: urchinTracker
  5. android 手机工具箱,Android工具箱下载
  6. 建立数字化、学习型人事平台,HR 与业务终于不再「隔空对话」
  7. 使用Turi Create训练核心ML模型以对犬种进行分类
  8. Redis 实现用户积分排行榜
  9. 【C语言】1161: 字符串长度(指针专题)(空格和\0)
  10. javascript小实例,阻止浏览器默认行为,真的能阻止吗?支持IE和标准浏览器的阻止默认行为的方法...
  11. CHROME插件开发之·web页面与插件后台通信(chrome.runtime.sendMessage => chrome.runtime.onMessageExternal.addListener)
  12. 微信突破版本限制永久设置透明/半透明头像
  13. 江南大学计算机科学复试题目,2019江南大学计算机考研初试科目、参考书目、复试线...
  14. 互联网医院系统搭建,打造在线问诊系统新模式
  15. 谷粒商城高级篇(36)——商品上架之上传数据到Elasticsearch
  16. html5 css 渐变背景,css渐变,css渐变色背景
  17. YII2 数据库常用操作案例
  18. Github安卓流行布局开源库
  19. 【OpenVINO】 Windows10环境下载安装
  20. 请写出sfr和sbit的语句格式_KEIL中的SFR和SBIT用法

热门文章

  1. Java静态变量初始化时机
  2. [HIS] HIT行业常用名词及缩写定义
  3. 猴子选大王C/C++(两种方法)
  4. 【uni-app】uniapp 实现一键登录 超详细记录~
  5. 利用KeyValuePair生成sql键值对csharpVS2015
  6. matlab图片参数设置及导出(符合论文要求)
  7. POST请求的两种格式
  8. netlink学习笔记(一)
  9. 调查称2009年手机订票市场将达390亿美元
  10. 【完成一个基于STM32汇编程序的编写】