【Python零基础入门篇 · 21】:多线程的封装和使用、线程的同步、互斥锁、执行的任务有参数

简介: 【Python零基础入门篇 · 21】:多线程的封装和使用、线程的同步、互斥锁、执行的任务有参数

一、多任务的概念


并发: 在一段时间内交替去执行任务


并行: 对于多核cpu处理多任务,操作系统会给cpu的每个内核安排一个执行的软件,多个内核是真正的一起执行软件。


这里需要注意多核cpu是并行的执行多任务,始终有多个软件一起执行。




二、多线程


使用threading模块里面的Thread类创建出实例对象, 然后通过start()方法真正的去产生一个新的线程。


1、主线程和子线程


解释器中来执行代码的叫做主线程


通过start()方法创建出来的叫做子线程


  • 线程模块:threading


  • 创建子线程:Thread()


  • 开启线程:start()


2、基本代码演示


下图的代码逻辑:


开启子线程时会同时运行func()和funb()函数,同时等待两秒,相当于减少了两秒时间


105696ddff7643f4ac7b5acca58122f1.png


3、 setDaemon(True)的使用


守护线程,主线程执行完了,子线程也会跟着结束,要放在start()前面


代码逻辑:


   过滤执行代码__name__=='__main__'下的代码开始执行,执行到 t1.start()和t2.start()时,同时运行 func()和funb() 函数,然后程序继续运行 t1.start()和t2.start() 后的代码。


   print(123)是主线程的代码,运行完主线程的代码之后子线程也会跟着结束,因为 t1.start()和t2.start() 中有时间等待,在这个等待的时间里子线程已经随着主线程一起结束,所以后面的代码执行无法执行。

a9fa7e355c5f49c8875c2fbd094381a9.png


4、join()的使用


阻塞主线程:暂停的作用,等添加了join的子线程执行完,主线程才继续执行,要放在start()后面


代码逻辑


过滤执行代码__name__=='__main__'下的代码开始执行,执行到 t1.join()时会等到 fund()函数运行结束后,才继续执行 t1.join()后的代码

78d397e4c6984c8dbaaab2cb2704117d.png483caec91b8f4b82835a54540032659a.png



5、setName()和getName()的使用


setName():修改线程的名字,括号中写入的是所要修改成的名字


getName():获取线程名字

e20c23e9dbbc43bf8d1e54f3b596fb10.png


三、线程的无序


threading.current_thread().name——显示当前的线程对象名


image.png



四、线程的封装


代码逻辑


过滤执行代码__name__=='__main__'下的代码开始执行,运行到 my.start() 时会调用 Mythread 类中的 run() 方法,不会调用text()方法


f8c5b952d27a434db95abee33b6ed5cd.png


相关文章
|
安全 算法 Java
Java 多线程:线程安全与同步控制的深度解析
本文介绍了 Java 多线程开发的关键技术,涵盖线程的创建与启动、线程安全问题及其解决方案,包括 synchronized 关键字、原子类和线程间通信机制。通过示例代码讲解了多线程编程中的常见问题与优化方法,帮助开发者提升程序性能与稳定性。
491 0
|
10月前
|
设计模式 消息中间件 安全
【JUC】(3)常见的设计模式概念分析与多把锁使用场景!!理解线程状态转换条件!带你深入JUC!!文章全程笔记干货!!
JUC专栏第三篇,带你继续深入JUC! 本篇文章涵盖内容:保护性暂停、生产者与消费者、Park&unPark、线程转换条件、多把锁情况分析、可重入锁、顺序控制 笔记共享!!文章全程干货!
468 1
|
Java 数据挖掘 调度
Java 多线程创建零基础入门新手指南:从零开始全面学习多线程创建方法
本文从零基础角度出发,深入浅出地讲解Java多线程的创建方式。内容涵盖继承`Thread`类、实现`Runnable`接口、使用`Callable`和`Future`接口以及线程池的创建与管理等核心知识点。通过代码示例与应用场景分析,帮助读者理解每种方式的特点及适用场景,理论结合实践,轻松掌握Java多线程编程 essentials。
864 5
|
数据采集 监控 调度
干货分享“用 多线程 爬取数据”:单线程 + 协程的效率反超 3 倍,这才是 Python 异步的正确打开方式
在 Python 爬虫中,多线程因 GIL 和切换开销效率低下,而协程通过用户态调度实现高并发,大幅提升爬取效率。本文详解协程原理、实战对比多线程性能,并提供最佳实践,助你掌握异步爬虫核心技术。
|
Python
python3多线程中使用线程睡眠
本文详细介绍了Python3多线程编程中使用线程睡眠的基本方法和应用场景。通过 `time.sleep()`函数,可以使线程暂停执行一段指定的时间,从而控制线程的执行节奏。通过实际示例演示了如何在多线程中使用线程睡眠来实现计数器和下载器功能。希望本文能帮助您更好地理解和应用Python多线程编程,提高程序的并发能力和执行效率。
616 20
|
安全 Java C#
Unity多线程使用(线程池)
在C#中使用线程池需引用`System.Threading`。创建单个线程时,务必在Unity程序停止前关闭线程(如使用`Thread.Abort()`),否则可能导致崩溃。示例代码展示了如何创建和管理线程,确保在线程中执行任务并在主线程中处理结果。完整代码包括线程池队列、主线程检查及线程安全的操作队列管理,确保多线程操作的稳定性和安全性。
|
安全 Java 数据处理
Python网络编程基础(Socket编程)多线程/多进程服务器编程
【4月更文挑战第11天】在网络编程中,随着客户端数量的增加,服务器的处理能力成为了一个重要的考量因素。为了处理多个客户端的并发请求,我们通常需要采用多线程或多进程的方式。在本章中,我们将探讨多线程/多进程服务器编程的概念,并通过一个多线程服务器的示例来演示其实现。
|
数据采集 数据库 C++
python并发编程:并发编程中是选择多线程呢?还是多进程呢?还是多协程呢?
python并发编程:并发编程中是选择多线程呢?还是多进程呢?还是多协程呢?
694 0
聊聊python多线程与多进程
为什么要使用多进程与多线程呢? 因为我们如果按照流程一步步执行任务实在是太慢了,假如一个任务就是10秒,两个任务就是20秒,那100个任务呢?况且cpu这么贵,时间长了就是浪费生命啊!一个任务比喻成一个人,别个做高铁,你做绿皮火车,可想而知!接下来我们先看个例子:
|
数据采集 Java 数据处理
Python实用技巧:轻松驾驭多线程与多进程,加速任务执行
在Python编程中,多线程和多进程是提升程序效率的关键工具。多线程适用于I/O密集型任务,如文件读写、网络请求;多进程则适合CPU密集型任务,如科学计算、图像处理。本文详细介绍这两种并发编程方式的基本用法及应用场景,并通过实例代码展示如何使用threading、multiprocessing模块及线程池、进程池来优化程序性能。结合实际案例,帮助读者掌握并发编程技巧,提高程序执行速度和资源利用率。
840 0

热门文章

最新文章

推荐镜像

更多