位置: IT常识 - 正文

python的多线程(python的多线程 吃cpu太厉害)

编辑:rootadmin
一、线程的概念线程是CPU分配资源的基本单位。当一程序开始运行,这个程序就变成了一个进程,而一个进程相当于一个或者多个线程。当没有多线程编程时,一个进程相当于一个主线程;当有多线程编程时,一个进程包含多个线程(含主线程)。使用线程可以实现程序大的开发。 多个线程可以在同一个程序中运行,并且每一个线程 ...

推荐整理分享python的多线程(python的多线程 吃cpu太厉害),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:python的多线程模块,python的多线程写聊天软件,python的多线程能否用来做并行计算,python的多线程机制,python的多线程模块,python的多线程和java的多线程,python的多线程机制,python的多线程机制,内容如对您有帮助,希望把文章链接给更多的朋友!

一、线程的概念线程是CPU分配资源的基本单位。当一程序开始运行,这个程序就变成了一个进程,而一个进程相当于一个或者多个线程。当没有多线程编程时,一个进程相当于一个主线程;当有多线程编程时,一个进程包含多个线程(含主线程)。使用线程可以实现程序大的开发。

多个线程可以在同一个程序中运行,并且每一个线程完成不同的任务。

多线程实现后台服务程序可以同时处理多个任务,并不发生阻塞现象。

多线程的程序设计的特点就是能够提高程序执行效率和处理速度。python程序可以同时并行运行多个相对独立的线程。

二、创建多线程python支持两种创建多线程的方式:

~通过 threading.Thread () 创建。

~通过继承 threading.Thread 类的继承。

1.通过 threading.Thread () 创建

语法形式:

thread.Thread(group=Nore,targt=None,args=(),kwargs={},*,daemon=None)

参数解释:

~group:必须为None,于ThreadGroup类相关,一般不使用。

~target:线程调用的对象,就是目标函数。

~name:为线程起这个名字。默认是Tread-x,x是序号,由1开始,第一个创建的线程名字就是Tread-1。

~args:为目标函数传递关键字参数,字典。

~daemon:用来设置线程是否随主线程退出而退出。

示例:

import threadingdef test (x,y): for i in range(x,y): print(i)thread1 = threading.Thread(name='t1',target= test,args=(1,10))thread2 = threading.Thread(name='t2',target= test,args=(11,20))thread1.start() #启动线程1thread2.start() #启动线程2123456789111213141516171819

解释:两个程序会并发运行,所以结果不一定每次都是顺序的1~10,这是根据CPU给两个线程风马分配的时间片段来决定。可以看到每次结果都不同。

2.通过继承 threading.Thread 类的继承

threading.Thread是一个类,可以继承它。

示例:

import threadingclass mythread(threading.Thread): def run(self): for i in range(1,10): print(i)thread1 = mythread();thread2 = mythread();thread1.start()thread2.start()

输出:

123456789123456789

解释:自定义一个类继承threading.Thread,然后重写父类的run方法,线程启动时(执行start())会自动执行该方法。

三、主线程

在python中,主线程是第一个启动的线程。

~父线程:如果启动线程A中启动了一个线程B,A就是B的父线程。

~子线程:B就是A的子线程。

python的多线程(python的多线程 吃cpu太厉害)

创建线程时有一个damon属性,用它来判断主线程。当daemon设置False时,线程不会随主线程退出而退出,主线程会一直等着子线程执行完;。当daemon设置True时,线程会随主线程退出而退出,主线程结束其他的子线程会强制退出。

使用daemon注意:

~daemon属性必须在start( )之前设置,否则会引发RuntimeError异常

~每个线程都由daemon属性,可以显示设置也可以不设置,不设置则取默认值None

~如果子子线程不设置daemon属性,就取当前线程的daemon来设置它。子子线程继承子线程的daemon值,作用和设置None一样。

~从主线程创建的所有线程不设置daemon属性,则默认都是daemon=False。

示例:

import timeimport threadingdef test(): time.sleep(10) for i in range(10): print(i)thread1 = threading.Thread(target=test,daemon=False)thread1.start()print('主线程完成了')

输出:

主线程完成了123456789

解释:当主线程运行完毕输出完之后,等待一下后输出0~9。如果将daemon=False该为daemon=True,则不会运行for i in range(10)语句。

四、阻塞线程

一个线程中调用另一个线程的join方法,调用者被阻塞,直到调用线程被终止。

语法形式:

join(timeout-=None)

timeout 参数指定调用者等待多久,没有设置时,就一直等待被调用线程结束被调用线程结束。其中,一个线程可以被join多次调用。

示例:

import timeimport threadingdef test(): time.sleep(5) for i in range(10): print(i)thread1=threading.Thread(target=test)thread1.start()thread1.join()print('主线程完成了')

输出:

0123456789主线程完成了

解释:在thread1.start()后加thread1.join()添加join方法,输出时,主线程就会等待输出完0~9后再执行自己的print输出。

五、判断线程是否活动的

~run():用以表示线程活动的方法

~start():启动线程

~join():等待至线程终止

~isAlive():返回线程是否活动的

~getName():返回线程名称

~setName() : 设置线程名称

示例:

from threading import Thread, Eventimport timedef countdown(n, started_evt): print('正在运行') started_evt.set() while n > 0: print('时间', n) n -= 1 time.sleep(2)started_evt = Event()print('开始倒计时')t = Thread(target=countdown, args=(10, started_evt))t.start()started_evt.wait()print('倒计时运行')

输出:

开始倒计时正在运行时间 10倒计时运行时间 9时间 8时间 7时间 6时间 5时间 4时间 3时间 2时间 1

Alive,顾名思义,它表示线程当前是否为可用状态,如果线程已经启动,并且当前没有任何异常的话,则返回true,否则为false

Thread.isAlive() :顾名思义,是表示当前线程时候为可用状态,即是否已经在启动,并且在运行的状态;

六、线程同步1.同步概念

异步模式的情况下,同时有一个线程在修改共享数据,另一个线程在读取共享数据,当修改的共享数据的线程没有处理完毕,读取数据的线程肯定会得到错误的结果。如果采用多线程的同步控制机制,当处理共享数据的线程完成处理数据之后,读取线程就读取数据。

python的锁就解决这一问题,锁住线程,只允许一个线程操作,其他线程排队等待,待当前线程操作完毕后,再按顺序一个一个来运行。

2. python的锁

python的threading模块提供了RLock锁解决方法。在某一时间只能让一个线程操作的语句放到RLock的acquire方法和release方法之间,即acquire相当于给RLack上锁,而release相当于解锁。

示例:

import threadingclass mythread(threading.Thread): def run(self): global x #
本文链接地址:https://www.jiuchutong.com/zhishi/310220.html 转载请保留说明!

上一篇:WordPress如何批量删除无用的标签(wordpress批量生成文章)

下一篇:java中TimerTask是什么(java timestamp localdatetime)

  • electron打包成exe

    electron打包成exe

  • 小米平板5pro屏幕刷新率在哪设置(小米平板5pro屏幕比例)

    小米平板5pro屏幕刷新率在哪设置(小米平板5pro屏幕比例)

  • 微信怎样隐藏电话号码(微信怎样隐藏电话号码关了,为什么别人手机还看到)

    微信怎样隐藏电话号码(微信怎样隐藏电话号码关了,为什么别人手机还看到)

  • 淘宝补发货怎么查物流(淘宝补发货怎么查看)

    淘宝补发货怎么查物流(淘宝补发货怎么查看)

  • 怎么跳过微信注册扫码(怎么跳过微信注册新账号)

    怎么跳过微信注册扫码(怎么跳过微信注册新账号)

  • 抖音金币怎么提现(抖音金币怎么提升等级)

    抖音金币怎么提现(抖音金币怎么提升等级)

  • 钉钉里的视频怎么转发到微信(钉钉里的视频怎么保存到u盘)

    钉钉里的视频怎么转发到微信(钉钉里的视频怎么保存到u盘)

  • 抖音加入黑名单还能看我发的内容吗(抖音加入黑名单还能看到访客记录吗)

    抖音加入黑名单还能看我发的内容吗(抖音加入黑名单还能看到访客记录吗)

  • 三星手机黑屏但有震动(三星手机黑屏但是触摸正常)

    三星手机黑屏但有震动(三星手机黑屏但是触摸正常)

  • 固态加机械影响速度吗(固态加机械影响散热吗)

    固态加机械影响速度吗(固态加机械影响散热吗)

  • 微信分类在哪里设置(微信分类怎么看)

    微信分类在哪里设置(微信分类怎么看)

  • 怎么退出页眉页脚编辑(怎么退出页眉页脚模式)

    怎么退出页眉页脚编辑(怎么退出页眉页脚模式)

  • 苹果手机发烫闪退是什么原因(苹果手机发烫闪光灯用不了)

    苹果手机发烫闪退是什么原因(苹果手机发烫闪光灯用不了)

  • 华为nova7pro时间怎么设置24小时(华为nova7pro时间在哪设置)

    华为nova7pro时间怎么设置24小时(华为nova7pro时间在哪设置)

  • qq正在通话中什么意思(qq正在通话中什么原因)

    qq正在通话中什么意思(qq正在通话中什么原因)

  • 苹果5s停用连接itunes是什么意思(苹果5iphone已停用连接itunes)

    苹果5s停用连接itunes是什么意思(苹果5iphone已停用连接itunes)

  • 苹果11内存怎么看(苹果11内存怎么买)

    苹果11内存怎么看(苹果11内存怎么买)

  • iphone11有128g的吗(iphone11有128g的嘛)

    iphone11有128g的吗(iphone11有128g的嘛)

  • 华为crrul20是什么型号(华为crrul20是什么型号手机)

    华为crrul20是什么型号(华为crrul20是什么型号手机)

  • ps如何载入素材(ps怎么加载素材)

    ps如何载入素材(ps怎么加载素材)

  • ps怎么把图片变清晰(ps怎么把图片变成手绘效果)

    ps怎么把图片变清晰(ps怎么把图片变成手绘效果)

  • 天猫垫付账号在哪里(天猫平台垫付会撤回吗)

    天猫垫付账号在哪里(天猫平台垫付会撤回吗)

  • beatsx如何连接

    beatsx如何连接

  • 苹果x的nfc功能怎么开启(苹果x的nfc功能怎么添加门禁卡)

    苹果x的nfc功能怎么开启(苹果x的nfc功能怎么添加门禁卡)

  • word的除号怎么打(word中的除号)

    word的除号怎么打(word中的除号)

  • 荣耀手环nfc功能是什么(荣耀手环nfc功能可以读取身份证信息吗)

    荣耀手环nfc功能是什么(荣耀手环nfc功能可以读取身份证信息吗)

  • 苹果xr指纹设置(苹果xr指纹锁在哪)

    苹果xr指纹设置(苹果xr指纹锁在哪)

  • oppoa9私密照片怎么看(oppoa9手机设为私密的照片怎么找)

    oppoa9私密照片怎么看(oppoa9手机设为私密的照片怎么找)

  • QQ邮箱怎么发邮件(QQ邮箱怎么发邮箱给别人)

    QQ邮箱怎么发邮件(QQ邮箱怎么发邮箱给别人)

  • 头歌-HTML基础(头歌HTML基础第一关初识HTML)

    头歌-HTML基础(头歌HTML基础第一关初识HTML)

  • 谷歌研究员走火入魔事件曝光:认为AI已具备人格,被罚带薪休假,聊天记录让网友San值狂掉...(谷歌研究院)

    谷歌研究员走火入魔事件曝光:认为AI已具备人格,被罚带薪休假,聊天记录让网友San值狂掉...(谷歌研究院)

  • 增值税年末结转的会计处理
  • 进项税额的计税基础是什么
  • 什么是税法要素
  • 购买二手车还需要交购置税吗
  • 各行业的税负率表2022
  • 变动成本法的计算公式有哪些
  • 支付短期借款利息的会计科目
  • 删除申报记录什么意思
  • 发票上盖了老税号怎么办
  • 纳税人财务会计报表报送管理办法
  • 招待费和福利费每年标准
  • 货物已到发票未到怎么做账
  • 建安税由谁承担
  • 公司企业变更后原来的营业执照还有吗
  • 企业销售净利润较低说明什么
  • 劳务费增值税专用发票虚开一万元怎么补救
  • 损失性费用的会计科目有
  • 不申报税务登记被注销
  • 出纳收到汇票如何登记
  • 领用自产产品用于在建工程入账金额
  • 委托代销商品账簿模板
  • 房地产增值税结转收入的条件是什么
  • 采购材料的运费怎么做分录
  • 存货跌价准备是谁的备抵账户
  • 固定资产改扩建过程中,发生的人工费用
  • 购物卡销售的重点工作是什么
  • 建筑劳务公司一年挣多少钱
  • nomoreporn.exe - nomoreporn是什么进程 有什么用
  • 财务清算的作用
  • 其他应收款
  • 前端男神尤雨溪传奇
  • php ajax 实现
  • 缴纳社保公司需要税务登记吗
  • 知识产权专利费包括哪些费用
  • sosreport命令收集详细信息
  • 融资租入固定资产的账务处理
  • 一般纳税人是否享受减免政策
  • 帝国cms专题
  • 小企业会计准则没有以前年度损益调整科目
  • 陈列费怎么开票
  • 分页存储的优缺点
  • 长期借款利息如何计算
  • 注册公司时企业类型为什么没有自然人独资
  • 办公室租金产生的税率
  • 企业委托企业
  • 小规模个人所得税税率表2023年
  • 利息收入的会计科目
  • 购买土地的流程
  • 建筑公司脚手架租赁费会计分录
  • 进项大于销项如何做分录
  • 未开票收入如何申报增值税
  • 国家资产负债表
  • 哪些可以做进项税
  • 现金日记账和银行存款日记账必须逐日结出余额
  • Linux/UNIX和Window平台上安装Mysql
  • 轻轻松松在树枝上摘果子用什么成语
  • freebsd怎么用
  • 电脑xp自带的杀毒软件在哪里
  • xp系统优化软件哪个好
  • win10连无线网络受限
  • WIN10系统中WPS字体颜色浅
  • linux如何创建ftp
  • win8系统怎么打开运行
  • unity制作ar手机游戏
  • javascript基础编程
  • exact form
  • jquery教程
  • 批处理结束后不关闭窗口
  • node.js 微信小程序
  • nodejs vue
  • python 连接符
  • unity 断点
  • java分布式计算
  • document对象的常用方法
  • h5实现微信分享
  • 常州车辆过户手续办理
  • 北京市国家税务局发票查询平台
  • 2020年残保金申报截止到什么时间
  • 形容有待完善的词语
  • 中小微企业包括一般纳税人吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设