前言

今天小王请xiaoming和xiaowang吃火锅,吃完火锅的时候会有以下三种场景:

  • 场景一:小王(主)先吃完了,海海(客)和老王(客)还没吃完,这种场景会导致结账的人先走了,剩下两个小伙伴傻眼了。。。

  • 场景二:小王(主)先吃完了,海海和老王还没吃饱,一起结账走人。

  • 场景三:小王(主)先等海海和老王吃饱了,小编最后结账一起走人。

主线程与子线程

场景一:主线程已经结束了,子线程还在跑

1.我们把thread1.start()和thread2.start()称为两个子线程,写在外面的代码就是主线程了。


# -*- coding:utf-8 -*-import timeimport threading

def chiHuoGuo(people):    print("%s 吃火锅的小伙伴-羊肉:%s" % (time.ctime(),people))    time.sleep(1)    print("%s 吃火锅的小伙伴-鱼丸:%s" % (time.ctime(),people))

class myThread(threading.Thread):    def __init__(self, people, name):        '''重写threading.Thread初始化内容'''        threading.Thread.__init__(self)        self.threadNmae = name        self.people = people

    def run(self):        print("开始线程:" + self.threadNmae)

        chiHuoGuo(self.people)        print("结束线程:" + self.threadNmae)

if __name__ == "__main__":    # 启动线程    thread1 = myThread("xiaoming", "Thread-1")    thread2 = myThread("xiaowang", "Thread-2")

    thread1.start()    thread2.start()

    time.sleep(0.1)    print("退出主线程:吃火锅,结账走人")

守护线程setDaemon()

场景二:主线程结束了,子线程必须也跟着结束

1.主线程中,创建了子线程 线程A和线程B,并且在主线程中调用了thread.setDaemon(),这个的意思是,把主线程设置为守护线程,这时候,要是主线程执行结束了,就不管子线程是否完成,一并和主线程退出.
(敲黑板:必须在start()方法调用之前设置,如果不设置为守护线程,程序会被无限挂起。)

2.线程有一个布尔属性叫做daemon。表示线程是否是守护线程,默认取否。当程序中的线程全部是守护线程时,程序才会退出。只要还存在一个非守护线程,程序就不会退出。
主线程是非守护线程。

3.setDaemon(True)此方法里面参数设置为True才会生效

# coding=utf-8
import threading
import timedef chiHuoGuo(people):print("%s 吃火锅的小伙伴-羊肉:%s" % (time.ctime(),people))time.sleep(1)print("%s 吃火锅的小伙伴-鱼丸:%s" % (time.ctime(),people))class myThread (threading.Thread):   # 继承父类threading.Threaddef __init__(self, people, name):'''重写threading.Thread初始化内容'''threading.Thread.__init__(self)self.threadName = nameself.people = peopledef run(self):   # 把要执行的代码写到run函数里面 线程在创建后会直接运行run函数'''重写run方法'''print("开始线程: " + self.threadName)chiHuoGuo(self.people)     # 执行任务print("结束线程: " + self.name)print("yoyo请小伙伴开始吃火锅:!!!")# 创建新线程
thread1 = myThread("xiaoming", "Thread-1")
thread2 = myThread("xiaowang", "Thread-2")# 守护线程setDaemon(True)
thread1.setDaemon(True)       # 必须在start之前
thread2.setDaemon(True)# 开启线程
thread1.start()
thread2.start()time.sleep(0.1)
print("退出主线程:吃火锅结束,结账走人")

4.运行结果:

阻塞主线程join(timeout)

1.如果想让主线程等待子线程结束后再运行的话,就需要用到join(),此方法是在start之后(与setDaemon相反)

2.join(timeout)此方法有个timeout参数,是线程超时时间设置。

# coding=utf-8
import threading
import timedef chiHuoGuo(people): print("%s 吃火锅的小伙伴-羊肉:%s" % (time.ctime(),people)) time.sleep(1) print("%s 吃火锅的小伙伴-鱼丸:%s" % (time.ctime(),people)) class myThread (threading.Thread): # 继承父类threading.Thread def __init__(self, people, name): '''重写threading.Thread初始化内容''' threading.Thread.__init__(self) self.threadName = name self.people = people def run(self): # 把要执行的代码写到run函数里面 线程在创建后会直接运行run函数 '''重写run方法''' print("开始线程: " + self.threadName) chiHuoGuo(self.people) # 执行任务  print("结束线程: " + self.name) print("yoyo请小伙伴开始吃火锅:!!!") # 创建新线程 thread1 = myThread("xiaoming", "Thread-1") thread2 = myThread("xiaowang", "Thread-2") # 开启线程 thread1.start() thread2.start() # 阻塞主线程,等子线程结束 thread1.join() thread2.join() time.sleep(0.1) print("退出主线程:吃火锅结束,结账走人")

运行结果:

转载于:https://www.cnblogs.com/wanghaihong200/p/8617657.html

python笔记9-多线程Threading之阻塞(join)和守护线程(setDaemon)相关推荐

  1. python多线程threading之阻塞线程(join)线程同步和守护线程(setDaemon(True))实例详解

    一.多线程(主线程和子线程同时执行) 1.主线程是程序本身,看不到的,主线程和子线程没有依赖关系,同步执行的,若主线程先执行完,会等子线程执行完毕,程序结束 2.启动一个线程就是把一个函数传入并创建T ...

  2. python 守护线程 join_Python多线程threading join和守护线程setDeamon原理详解

    同一进程下的多个线程共享内存数据,多个线程之间没有主次关系,相互之间可以操作:cpu执行的都是线程,默认程序会开一个主线程:进程是程序以及和程序相关资源的集合:某些场景下我们可以使用多线程来达到提高程 ...

  3. python爬虫之多线程threading、多进程multiprocessing、协程aiohttp 批量下载图片

    一.单线程常规下载 常规单线程执行脚本爬取壁纸图片,只爬取一页的图片. import datetime import re import requests from bs4 import Beauti ...

  4. JAVE SE 学习day_09:sleep线程阻塞方法、守护线程、join协调线程同步方法、synchronized关键字解决多线程并发安全问题

    一.sleep线程阻塞方法 static void sleep(long ms) Thread提供的静态方法sleep可以让运行该方法的线程阻塞指定毫秒,超时后线程会自动回到RUNNABLE状态,等待 ...

  5. Python编程基础:第五十九节 守护线程Daemon Threading

    第五十九节 守护线程Daemon Threading 前言 实践 前言 守护线程是在后台运行的线程,对程序的运行并不重要,你的程序在退出前不会等待守护线程的完成,此类线程的特点是,当程序中主线程及所有 ...

  6. Python常用模块 之 threading和Thread模块 第一阶段 线程的实现

    目录: 引入: 每篇前言: 1. 线程 1.1 线程模块: 1.1.1 Thread类: 1.2 创建线程: 1.2.1 实例Thread类法创建线程: 1.2.1 继承重写Thread类法创建线程: ...

  7. 第三十三天- 线程创建、join、守护线程、死锁

    1.线程,线程创建 概念:在传统操作系统中,每个进程有一个地址空间,而且默认就有一个控制线程,线程顾名思义,就是一条流水线工作的过程,一条流水线必须属于一个车间,一个车间的工作过程是一个进程,车间负责 ...

  8. JAVA多线程:守护线程 setDaemon全方位剖析| 守护线程是线程吗 |thread.isAlive()反思(五)

    前言 本文目的,通过短小精悍的实例,让你在最短时间,全面揭晓 thread.setDaemon(true)守护线程的使用,及其使用场景.一看就懂,一学就会! 概述 守护线程的作用 用来让其(这里暂称之 ...

  9. python锁机制_python基础(锁机制,守护线程,线程队列,线程池)

    一. 互斥锁(Lock)与递归锁(RLock)机制 1.1 由互斥锁(Lock)产生的死锁现象: #互斥锁(死锁现象): #死锁现象: from threading importLock lock=L ...

最新文章

  1. 要学习的别人的博客网址---收藏
  2. 数塔(杭电2084)
  3. java练气期(3)----java高级(网络编程)
  4. 线性及非线性方程组的解法
  5. SQL Server - 高可用与灾难恢复(HADR)技术 -- AlwaysOn可用性组(理论篇)
  6. 手把手教你感情企划书
  7. Delphi 中的字符串函数(6) - StrUtils 中的 Ansi 字符串函数
  8. oracle下tmp后缀文件怎么打开,什么是TMP文件,怎么打开?(图文)
  9. 好的程序员“借”,伟大的程序员“偷”!
  10. 柔性太阳能电池pdf_CIS太阳能电池.pdf
  11. readlink()不能读取硬链接的目标
  12. 超详细设置Idea类注释模板和方法注释模板
  13. [内附完整源码和文档] 基于JAVA的干部档案管理系统
  14. 20172328的结对编程四则运算第二周-整体总结
  15. BigDecimal类型加减乘除运算(Java必备知识)
  16. 高德地图 定位 设置文本
  17. 计算机网络第七版(谢希仁)学习目录
  18. 违反唯一性约束的两种可能:唯一约束or唯一索引
  19. 如何用python写一个把文件大小字节数转换为KB,MB,GB,TB等单位的函数
  20. rasa开发过程中出现的错误情况(实时更新)

热门文章

  1. 关于上篇文章的okhttp中对于onFailure回调的异常捕获
  2. VB 读取资源文件里面的字符串
  3. VB利用资源文件进行工作
  4. 国内首批AI专业毕业生创办的澎思科技,已完成Pre-A轮融资
  5. 又一所小而精研究型大学!中科院与深圳共建,设AI等专业
  6. 中关村十大AI研究院 | 盘点
  7. 特斯拉Model 3产能跟不上,是因为用了太多机器人
  8. AI大咖们的18岁照,你能认对几个?
  9. 谁敢动英伟达的奶酪?AI芯片领域,这12家创业公司值得关注
  10. 安卓Android Support Design Library——Snackbar