博客
关于我
python笔记9-多线程Threading之阻塞(join)和守护线程(setDaemon)
阅读量:476 次
发布时间:2019-03-06

本文共 1648 字,大约阅读时间需要 5 分钟。

多线程应用实例

今天小编YOYO请小伙伴们吃火锅,吃完火锅时会出现三种不同的场景。这些场景不仅考验团队的默契,也为我们理解多线程编程提供了绝佳的实例。

1. 主线程与子线程

在编程中,主线程负责协调子线程的执行。以下场景展示了主线程与子线程的关系:

  • 场景一:主线程已结束,而子线程仍在运行。这种情况下,子线程可能会导致主线程无法正常退出。
  • 场景二:主线程结束后,子线程也随之终止。这通常通过设置主线程为守护线程来实现。

2. 守护线程setDaemon()

为了确保主线程退出时所有子线程也随之终止,我们可以使用setDaemon()方法将子线程设置为守护线程。这样一来,只要主线程退出,所有子线程都会自动终止。

  • 场景二:主线程结束后,子线程也会随之终止。这与设置守护线程的效果一致。

3. 阻塞主线程join(timeout)

如果需要让主线程等待子线程完成,可以使用join()方法。join(timeout)还允许设置超时,确保主线程不会无限等待。

  • 场景三:主线程等待子线程完成后,再一起结账走人。这与使用join()的效果一致。

4. 参考代码

以下代码展示了如何创建并管理多线程:

import threading
import time
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.__init__(self)
self.threadName = name
self.people = people
def run(self):
print("开始线程: " + self.threadName)
chiHuoGuo(self.people)
print("qq交流群:226296743")
print("结束线程: " + self.name)
print("yoyo请小伙伴开始吃火锅:!!!")
# 创建新线程
thread1 = myThread("xiaoming", "Thread-1")
thread2 = myThread("xiaowang", "Thread-2")
# 设置守护线程
thread1.setDaemon(True)
thread2.setDaemon(True)
# 开启线程
thread1.start()
thread2.start()
time.sleep(0.1)
print("退出主线程:吃火锅结束,结账走人")

5. 运行结果

运行上述代码可以看到以下输出:

yoyo请小伙伴开始吃火锅:!!!
开始线程:Thread-1
开始线程:Thread-2
吃火锅的小伙伴-羊肉:xiaoming
吃火锅的小伙伴-鱼丸:xiaoming
吃火锅的小伙伴-羊肉:xiaowang
吃火锅的小伙伴-鱼丸:xiaowang
结束线程:Thread-1
结束线程:Thread-2
退出主线程:吃火锅结束,结账走人

6. 注意事项

  • 设置守护线程:必须在start()之前调用setDaemon(True),否则程序可能会被无限挂起。
  • 使用join():如果需要确保子线程完成执行,可以使用join()方法。
  • 线程组管理:可以将多个线程组合在一起管理,使用join()等待所有线程完成。

通过上述实例,我们可以清晰地理解多线程编程的基本原理及其应用场景。希望这些内容能为您的学习提供帮助!

转载地址:http://bdmbz.baihongyu.com/

你可能感兴趣的文章
Nitrux 3.8 发布!性能全面提升,带来非凡体验
查看>>
NI笔试——大数加法
查看>>
NLog 自定义字段 写入 oracle
查看>>
NLP 基于kashgari和BERT实现中文命名实体识别(NER)
查看>>
NLP 项目:维基百科文章爬虫和分类【01】 - 语料库阅读器
查看>>
NLP_什么是统计语言模型_条件概率的链式法则_n元统计语言模型_马尔科夫链_数据稀疏(出现了词库中没有的词)_统计语言模型的平滑策略---人工智能工作笔记0035
查看>>
NLP学习笔记:使用 Python 进行NLTK
查看>>
NLP问答系统:使用 Deepset SQUAD 和 SQuAD v2 度量评估
查看>>
NLP:使用 SciKit Learn 的文本矢量化方法
查看>>
Nmap扫描教程之Nmap基础知识
查看>>
Nmap端口扫描工具Windows安装和命令大全(非常详细)零基础入门到精通,收藏这篇就够了
查看>>
NMAP网络扫描工具的安装与使用
查看>>
NMF(非负矩阵分解)
查看>>
NN&DL4.1 Deep L-layer neural network简介
查看>>
NN&DL4.3 Getting your matrix dimensions right
查看>>
NN&DL4.8 What does this have to do with the brain?
查看>>
No 'Access-Control-Allow-Origin' header is present on the requested resource.
查看>>
NO 157 去掉禅道访问地址中的zentao
查看>>
No Datastore Session bound to thread, and configuration does not allow creation of non-transactional
查看>>
No fallbackFactory instance of type class com.ruoyi---SpringCloud Alibaba_若依微服务框架改造---工作笔记005
查看>>