位置: 编程技术 - 正文

Python用threading实现多线程详解(python的threading模块详解)

编辑:rootadmin

推荐整理分享Python用threading实现多线程详解(python的threading模块详解),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:threading python的作用,python中thread,python中thread,python threading.join,python thread condition,python中thread,python中thread,python中threading,内容如对您有帮助,希望把文章链接给更多的朋友!

多线程

多线程是个提高程序运行效率的好办法,本来要顺序执行的程序现在可以并行执行,可想而知效率要提高很多。但是多线程也不是能提高所有程序的效率。程序的两个极端是‘CPU 密集型'和‘I/O 密集型'两种,多线程技术比较适用于后者,因为在串行结构中当你去读写磁盘或者网络通信的时候 CPU 是闲着的,毕竟网络比磁盘要慢几个数量级,磁盘比内存慢几个数量级,内存又比 CPU 慢几个数量级。多线程技术就可以同时执行,比如你的程序需要发送 N 个 http 数据包( 秒),还需要将文件从一个位置复制到另一个位置( 秒),然后还需要统计另一个文件中'hello,world'字符串的出现次数(4 秒),现在一共是要用 秒。但是因为这些操作之间没有关联,所以可以写成多线程程序,几乎只需要 秒就完成了。这是针对 I/O 密集型的,如果是 CPU 密集型的就不行了。比如我的程序要计算 的阶乘( 秒),还要计算 的累加(5 秒),那么即使程序是并行的,还是会要用 秒,甚至更多。因为当程序使用 CPU 的时候 CPU 是通过轮转来执行的,IO 密集型的程序可以在 IO 的同时用 CPU 计算,但是这里的 CPU 密集型就只能先执行一会儿线程 1 再执行一会儿线程 2。所以就需要 秒,甚至会更多,因为 CPU 在切换的时候需要耗时。解决 CPU 密集型程序的多线程问题就是 CPU 的事情了,比如 Intel 的超线程技术,可以在同一个核心上真正的并行两个线程,所以称之为‘双核四线程'或者‘四核八线程',我们这里具体的先不谈,谈我也不知道。

Python 骗人

说了这么多多线程的好处,但是其实 Python 不支持真正意义上的多线程编程。在 Python 中有一个叫做 GIL 的东西,中文是 全局解释器 ,这东西控制了 Python,让 Python 只能同时运行一个线程。相当于说真正意义上的多线程是由 CPU 来控制的,Python 中的多线程由 GIL 控制。如果有一个 CPU 密集型程序,用 C 语言写的,运行在一个四核处理器上,采用多线程技术的话最多可以获得 4 倍的效率提升,但是如果用 Python 写的话并不会有提高,甚至会变慢,因为线程切换的问题。所以 Python 多线程相对更加适合写 I/O 密集型程序,再说了真正的对效率要求很高的 CPU 密集型程序都用 C/C++ 去了。

第一个多线程

Python 中多线程的库一般用thread和threading这两个,thread不推荐新手和一般人使用,threading模块就相当够用了。

有一个程序,如下。两个循环,分别休眠 3 秒和 5 秒,串行执行的话需要 8 秒。

输出是这样的

Python用threading实现多线程详解(python的threading模块详解)

然后我们对它进行修改,使其变成多线程程序,虽然改动没有几行。首先引入了 threading 的库,然后实例化一个 threading.Thread 对象,将一个函数传进构造方法就行了。然后调用 Thread 的 start 方法开始一个线程。join() 方法可以等待该线程结束,就像我下面用的,如果我不加那两个等待线程结束的代码,那么就会直接执行输出时间的语句,这样一来统计的时间就不对了。

执行结果是这样的

daemon 守护线程

在我们理解中守护线程应该是很重要的,类比于 Linux 中的守护进程。但是在threading.Thread中偏偏不是。

如果把一个线程设置为守护线程,就表示这个线程是不重要的,进程退出的时候不需要等待这个线程执行完成。 ---------《Python 核心编程 第三版》

在 Thread 对象中默认所有线程都是非守护线程,这里有两个例子说明区别。这段代码执行的时候就没指定my_thread的daemon属性,所以默认为非守护,所以进程等待他结束。最后就可以看到 个 hello,world

这里设置了my_thread为守护线程,所以进程直接就退出了,并没有等待他的结束,所以我们看不到 个 hello,world 只有几个而已。甚至还会抛出一个异常告诉我们有线程没结束。

传个参数

之前的代码都是直接执行一段代码,没有过参数的传递,那么怎么传递参数呢?其实还是很简单的。threading.Thread(target=hello_world, args=('hello,', 'world'))就可以了。args 后面跟的是一个元组,如果没有参数可以不写,如果有参数就直接在元组里按顺序添加就行了。

再来个多线程

threading 有三种创建 Thread 对象的方式,但是一般只会用到两种,一种是上面0X说的传个函数进去,另一种就是这里说的继承threading.Thread。在这儿我们自己定义了两个类,类里重写了 run() 方法,也就是调用 start() 之后执行的代码,开启线程就和之前开启是一样的。之前的方式更面向过程,这个更面向对象。

总结

标签: python的threading模块详解

本文链接地址:https://www.jiuchutong.com/biancheng/380030.html 转载请保留说明!

上一篇:win10环境下python3.5安装步骤图文教程(win10 python环境)

下一篇:python模块之re正则表达式详解(python repr)

  • 增量留底退税基数是多少?
  • 预收账款可以开票吗
  • 服务业按什么结算收入
  • 公司买的电器可以抵扣吗
  • 对方只能开普票怎么办
  • 增值税税控系统技术维护费怎么抵扣
  • 非营利组织的项目管理流程包括
  • 可税前扣除的工资
  • 开办费如何做纳税调增
  • 长期应付款预算会计
  • 摊销土地使用权和专利权会计分录怎么写
  • 职工培训费进项能抵扣吗
  • 进项税当期已转出能调整再抵扣吗?
  • 固定资产账载金额和税收金额的区别
  • 财务申报工资和实际发工资
  • 没有发票的管理费用汇算清缴的时候怎么调出来
  • 国税几年都没有缴纳
  • 应征增值税不含税销售额(3%征收率)怎么算
  • 企业所得税预缴可以不交吗
  • 不动产评估增值税处理
  • 以前年度损益调整贷方余额表示什么
  • 怎么确认权益性投资收益收入?
  • 国家征收苗木专业合作社成员土地,应该怎样出示证件
  • 过期未抵扣的发票对企业有什么影响
  • 应收账款未计提坏账,但是确实收不回来
  • 苹果14如何强制关机重启
  • swstrtr.exe - swstrtr是什么进程
  • 车辆理赔过程中,赔付款给谁
  • linux 网络故障
  • linux系统安装谷歌浏览器教程
  • win7宽带连接错误651
  • mac键盘图标与对号不一致
  • 房地产预售阶段怎么开具发票
  • mmc.exe是什么进程
  • PHP clearstatcache()函数详解
  • 租房交了押金
  • 营改增会计分录
  • 个人独资企业怎么做账
  • php怎么创建项目
  • 一亩地是多少平方?
  • 进项税额转出可以填负数吗
  • 旅行社小规模纳税人差额征税
  • 深入浅出讲解傅里叶变换
  • 发票密码区如何调整
  • html零基础入门教程
  • phpcms建站教程
  • 一般纳税人企业所得税如何计算
  • 自产农产品免征个人所得税吗
  • 企业的对公账户怎么办理
  • 帝国cms批量excel导入文章
  • 织梦会员功能
  • 购买监控器计入什么科目
  • 公司借个人借款协议书范本
  • 教育培训行业税目分类
  • 用负数表示的例子
  • 暂估和冲暂估分录
  • 存货跌价准备什么科目
  • 坏账准备计提方法一经确定不得随意变更这种做法体现了
  • 减值准备减少记哪方
  • 小企业营业外收入包括
  • 现金和银行存款的区别
  • 税盘不缴费会怎么样
  • 基本户有什么用
  • 备用金取多少钱会被监控
  • xp内置语音输入没反应
  • CentOS 6.2(32位/64位) 安装步骤图文详解
  • win7开始图标怎么变大点
  • msedge.exe是什么
  • win8.1安装更新卡住
  • 个人pc用户免费下载软件
  • win8系统没有声音怎么办
  • win7系统的excel在哪里
  • javascript的理解
  • 搞定immutable.js详细说明
  • python构造方法的参数
  • python常见算法
  • for 命令
  • 狗刨好学吗
  • python 循环太慢
  • 小规模纳税人怎么申报纳税
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设