Python并发编程(2)——初始Python多线程
moboyou 2025-06-07 16:56 16 浏览
左手编程,右手年华。大家好,我是一点,关注我,带你走入编程的世界。
公众号:一点sir,关注领取python编程资料
前言
什么是多线程?
为什么需要多线程?
多线程的优点和缺点?
...
技术不是也不能成为空中楼阁,技术一定是要为需求服务的,什么有用,才去用什么。那么多线程对于编程人员来说,有用吗?肯定是有用,而且有大用,这是程序员从初级走向高级的重要标志之一。现在开始我们以世界上最流行的语言之一,Python为例,介绍一下多线程。
什么是多线程
多线程到底是什么呢?百科上面对于多线程的定义是指从软件或者硬件上实现多个线程并发执行的技术。多线程在计算机术语中也可以叫并发,指的是在单个系统里同时执行多个独立的活动,而不是顺序的一个接一个的执行。在多核CPU上,多线程甚至可以实现并行。关于并发和并行的区别,后期我也会输出。
大家要注意一点,在单核CPU上面,并不是真正的并行,而是通过时间片轮询的方式来看起来像是并行,真正的并行应该是在多核CPU上面。而在Python上,多线程并行目前为止只是一个美丽的梦。至于原因,后面会解释。
为什么需要多线程
为什么需要多线程?单线程编程做的好好的,又简单又好用,为什么要弄出一个多线程编程呢?难道前人是为了设计而设计了个多线程的?显然这是不可能,那么是什么原因呢?
假设这样的一个场景,假如你要计算1到10亿相加的和,如果用单线程,需要耗时一定的时间,这个就可以考虑用多线程,将10亿平均分成若干段,分别在和后,在将这几段相加,时间整体会比用单线程快的。
又比如有这样的一个场景,你在一个软件中要导入100万条的数据,如果你用单线程,那么你在导入的过程中,你只能等待它导完,其他什么事你都做不了,因为软件会卡在那里,之所以卡死在那里,是因为软件里面在传输数据,而你是用单线程,数据还没传输完,虎门的代码无法执行。所以这个时候你必须用多线程,开启一个线程来导入这100万条数据,这样才能保证在导入数据的同时,你还可以在软件上做其他操作。
所以用最精炼的语言概括无非就是以下两个原因。
效率和体验
效率主要体现在服务端,更多表现为对速度的追求。体验更多是体现在客户端,更多表现为界面交互。当然肯定不是说效率只体现在服务端,用户体验只体现在客户端,无论是效率还是用户体验在服务端和客户端上都会体现,只是说侧重点不一样。
多线程的优点和缺点
要精炼的概括出多线程的优点,无非就是从为什么需要多线程这个地方入手。为什么需要多线程?为了效率和体验!所以多线程的优点无非就是:
速度更快、体验更好。
而其他观点认为开销小,资源占用少,更加轻量级,无非就是与进程相比较比较的角度来看的,并不能算是多线程真正的优点。
世界是公平的,得到了好处,就一定会有牺牲。你觉得岁月静好,只不过有人替你负重前行罢了。多线程也是一样的!
那么多线程的缺点是啥呢?
数据容易出错。
这就是它最大的缺点!为什么数据容易出错呢?因为多线程将任务复杂化了,数据在多个线程中增删改查,一不小心就会出错,这也是没有办法的事情,因为这是为优点做出的牺牲。所以多线程编程需要更加小心,测试要更加详细。
当然,编程更加复杂也是一大缺点,像线程初始化,线程启动,线程传参等等,大家是不能用传统的函数调用来看待,内部的实现逻辑更是涉及到操作系统的相关知识。
多线程的实现
现在的高级编程语言几乎是都有对多线程的支持,只是方式可能不一样。Python 从早期版本开始就内置了对多线程的支持。通过 threading 模块,Python 允许开发者轻松地创建和管理线程。这使得 Python 程序能够并发处理,从而提升应用的性能和用户体验。 Python 实现多线程的方式也是非常简单的,以下是一个简单的例子:
import threading
import time
def thread_task(message):
print("let's sleep some time")
time.sleep(3)
print(message)
def main():
print("main thread start")
t = threading.Thread(target=thread_task, args=("hello, sir",))
t.start()
t.join()
print("main thread end")
if __name__ == "__main__":
main()
在这个例子中,threading.Thread(target=thread_task) 创建了一个新的线程,该线程执行 thread_task 函数。t.start() 调用启动了子线程,而 t.join() 确保主线程等待子线程完成后再继续执行,这样可以保证程序的有序退出,而sleep几秒就是模拟这种情况。 thread_task 函数接受一个参数 message。在创建 Thread 对象时,我们通过 args 参数传递了一个元组 ("Hello, sir",) 给 thread_task 函数。注意,即使只有一个参数,也需要以元组的形式传递。
相关推荐
- python新手学习常见数据类型——数字
-
Python支持三种不同的数值类型:整型(int)、浮点型(float)、复数(complex)创建数字:a=1b=2.7c=8+4j删除数字:a=1b=2.7c=8+4...
- 只用一个套路公式,给 Excel 中一列人员设置随机出场顺序
-
很多同学会觉得Excel单个案例讲解有些碎片化,初学者未必能完全理解和掌握。不少同学都希望有一套完整的图文教学,从最基础的概念开始,一步步由简入繁、从入门到精通,系统化地讲解Excel的各个知...
- Excel神技 TIME函数:3秒搞定时间拼接!职场人必学的效率秘籍
-
你是否经常需要在Excel中手动输入时间,或者从不同单元格拼接时、分、秒?今天我要揭秘一个超实用的Excel函数——TIME函数,它能让你3秒内生成标准时间格式,彻底告别繁琐操作!一、TIME函数基础...
- 销售算错数被批?97 Excel 数字函数救场,3 步搞定复杂计算
-
销售部小张被老板当着全部门骂。上季度销售额汇总,他把38652.78算成36852.78,差了1800块。财务对账时发现,整个部门的提成表都得重算。"连个数都算不对,还做什么销售?&...
- 如何使用Minitab 1分钟生成所需要的SPC数据
-
打开Minitab,“计算”-“随机数据”-“正太”,因为不好截图,使用的是拍照记录的方式.再要生产的行数中,填写125,可以按照要求,有些客户要求的是100个数据,就可以填写100...
- 验证码,除了 12306,我还没有服过谁
-
为了防止暴力注册或爬虫爬取等机器请求,需要验证操作者是人还是机器,便有了验证码这个设计。本文作者主要介绍了如何使用Axure来设计一个动态的图形验证码,一起来学习一下吧。在软件设计中,为了防止暴力...
- 零基础也能学会的9个Excel函数,小白进阶必备
-
今天给大家分享一些常用的函数公式,可以有效地解决Excel中办公所需,0基础也可以轻松学会。建议收藏,在需要的时候可以直接套用函数。1、计算排名根据总和,计算学生成绩排名。函数公式=RANK(E2,$...
- [office] excel表格数值如何设置_excel表格怎样设置数值
-
excel表格数值如何设置 因为电子表格应用程序是用来处理数值数据的,所以数值格式可能是工作表中最关键的部分,格式化数值数据的方式由用户决定,但在每个工作簿的工作表之间应使用一致的处理数字的方法。...
- Excel最常用的5个函数!会用最后一个才是高手
-
是不是在处理Excel数据时,面对繁琐的操作烦恼不已?手动操作不仅耗时费力,还容易出错。别担心,表姐这就为你揭秘Excel中几个超实用的函数,让数据处理变得轻松高效!表姐整理了552页《Office从...
- 新手必会的53个Excel函数_惊呆小伙伴的全套excel函数技能
-
(新手入门+进阶+新函数)一、新手入门级(24个)1、Sum函数:求和=Sum(区域)2、Average函数:求平均值=Average(区域)3、Count函数:数字个数=Count(区域)4、Cou...
- 打工人私藏的4个Excel函数秘籍,效率提升3.7%
-
小伙伴们好啊,今天咱们分享几个常用函数公式的典型应用。合并内容如下图,希望将B列的姓名,按照不同部门合并到一个单元格里。=TEXTJOIN(",",1,IF(A$2:A$15=D2,B...
- Excel偷偷更新的8个函数!原来高手都在用这些隐藏技能
-
领导突然要销售数据,你手忙脚乱筛选到眼花...同事3分钟搞定的报表,你折腾半小时还在填充公式...明明用了VLOOKUP,却总显示#N/A错误...别慌!今天教你的8个动态数组函数,就像给Excel装...
- Excel表格随机函数怎么用?讲解三种随机函数在不同场景的应用
-
excel随机函数,其特点是能够生成一组随机数字,根据不同需求,还能批量生成小数位和整数,及指定行数和列数,或指定区间范围内的数字。这里根据需求,作者设置了三个问题,第1个是随机生成0至1之间的数字...
- 单纯随机抽样该如何进行?_单纯随机抽样的适用范围及注意事项
-
在数据分析中,抽样是指从全部数据中选择部分数据进行分析,以发掘更大规模数据集中的有用信息。在收集数据过程中,绝大多数情况下,并不采取普查的方式获取总体中所有样本的数据信息,而是以各类抽样方法抽取其中若...
- 随机函数在Excel中的应用_随机函数在excel中的应用实例
-
【分享成果,随喜正能量】职场,如果你没有价值,那么你随时可能被取代;如果你的价值不如别人,那么社会也不会惯你,你将被无情地淘汰掉。不管什么时候,你一定要学会构建自己的价值。每个人都应该思考这个问题:我...
- 一周热门
- 最近发表
- 标签列表
-
- 外键约束 oracle (36)
- oracle的row number (32)
- 唯一索引 oracle (34)
- oracle in 表变量 (28)
- oracle导出dmp导出 (28)
- 多线程的创建方式 (29)
- 多线程 python (30)
- java多线程并发处理 (32)
- 宏程序代码一览表 (35)
- c++需要学多久 (25)
- css class选择器用法 (25)
- css样式引入 (30)
- css教程文字移动 (33)
- php简单源码 (36)
- php个人中心源码 (25)
- php小说爬取源码 (23)
- 云电脑app源码 (22)
- html画折线图 (24)
- docker好玩的应用 (28)
- linux有没有pe工具 (34)
- mysql数据库源码 (21)
- php开源万能表单系统源码 (21)
- 可以上传视频的网站源码 (25)
- match函数的功能是 (21)
- 随机函数如何生成小数点数字 (31)