位置: 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)

  • 华为gt3pro怎么连接手机(华为gt3pro怎么连接新手机)

    华为gt3pro怎么连接手机(华为gt3pro怎么连接新手机)

  • oppo手机怎么调出按键声音(oppo手机怎么调字体大小)

    oppo手机怎么调出按键声音(oppo手机怎么调字体大小)

  • 语音可以转发给别人吗(语音可以转发给别人吗微信)

    语音可以转发给别人吗(语音可以转发给别人吗微信)

  • 5g优享服务是什么意思(5g优享网络服务是什么)

    5g优享服务是什么意思(5g优享网络服务是什么)

  • 耳机放进盒子里为啥一直亮(耳机放进盒子里为啥不亮)

    耳机放进盒子里为啥一直亮(耳机放进盒子里为啥不亮)

  • 苹果7原装电池是什么牌子(苹果7原装电池在哪里买)

    苹果7原装电池是什么牌子(苹果7原装电池在哪里买)

  • qq音乐下载的歌曲是什么格式(qq音乐下载的歌曲会员过期还能听吗)

    qq音乐下载的歌曲是什么格式(qq音乐下载的歌曲会员过期还能听吗)

  • 手机蓝牙版本哪里查看(蓝牙版本哪个更好)

    手机蓝牙版本哪里查看(蓝牙版本哪个更好)

  • 抖音为什么会自动关注别人(抖音为什么会自动发布作品)

    抖音为什么会自动关注别人(抖音为什么会自动发布作品)

  • 修改群名称别人知道吗(修改群名称别人也变么)

    修改群名称别人知道吗(修改群名称别人也变么)

  • usb网络共享伤手机吗(usb网络共享网速快吗)

    usb网络共享伤手机吗(usb网络共享网速快吗)

  • 高级程序设计语言有哪些(高级程序设计语言编写的程序)

    高级程序设计语言有哪些(高级程序设计语言编写的程序)

  • 苹果x待机时间多久(苹果x待机时间多长正常)

    苹果x待机时间多久(苹果x待机时间多长正常)

  • 手机为什么开免提才能听见(手机为什么开免提打电话会卡顿)

    手机为什么开免提才能听见(手机为什么开免提打电话会卡顿)

  • 抖音消息能看到已读吗(抖音消息能看到谁点赞吗)

    抖音消息能看到已读吗(抖音消息能看到谁点赞吗)

  • 伯乐是什么意思(伯乐是什么意思比喻什么人)

    伯乐是什么意思(伯乐是什么意思比喻什么人)

  • 苹果下载过的app记录怎么删除(苹果下载过的app怎么再次使用密码)

    苹果下载过的app记录怎么删除(苹果下载过的app怎么再次使用密码)

  • 滴滴诱导乘客取消订单怎么申诉能成功(滴滴诱导乘客取消后还扣钱吗)

    滴滴诱导乘客取消订单怎么申诉能成功(滴滴诱导乘客取消后还扣钱吗)

  • 华为路况目的地怎么更改(华为手机的路况在哪里设置)

    华为路况目的地怎么更改(华为手机的路况在哪里设置)

  • 苹果xs跟苹果11的区别(苹果xs跟苹果11参数对比)

    苹果xs跟苹果11的区别(苹果xs跟苹果11参数对比)

  • lnvalid是什么意思(lnvalid是什么意思啊)

    lnvalid是什么意思(lnvalid是什么意思啊)

  • win10添加美式键盘(win10添加美式键盘到中文输入法)

    win10添加美式键盘(win10添加美式键盘到中文输入法)

  • 苹果云盘满了怎么删除(苹果手机云盘空间不足怎么办)

    苹果云盘满了怎么删除(苹果手机云盘空间不足怎么办)

  • 苹果手机遮住听筒就黑屏怎么取消(苹果手机遮住听筒怎么弄)

    苹果手机遮住听筒就黑屏怎么取消(苹果手机遮住听筒怎么弄)

  • 微视如何认证(微视如何认证新星创作者)

    微视如何认证(微视如何认证新星创作者)

  • web数据可视化(ECharts版)(web数据可视化(Echars版)实训)

    web数据可视化(ECharts版)(web数据可视化(Echars版)实训)

  • 土地取得方式有哪些
  • 计提印花税会计
  • 公司合同是公司员工个人名义签订如何入账?
  • 税费返还计入什么费用
  • 环评费用怎么入账
  • 一般纳税人变成小规模 在电子税务局哪里可以找到
  • 广告公司小规模税率
  • 可以抵扣的凭证
  • 用于购买固定资产的账户
  • 子公司注销是利空吗
  • 上月多计收入,本月如何调整?
  • 公司商务卡可以日常消费
  • 单位的收入是刷卡怎么做账
  • 房租税费计入什么会计科目
  • 企业短期贷款进什么科目
  • 行车记录仪怎么开发票
  • 中标服务费直接按开票金额付款吗
  • 增值税附表是自动生成的吗
  • 安保服务费税率几个点怎么算
  • 纳税人识别号在哪里能查到
  • 工商年报纳税总额是应缴还是实缴
  • 未确认融资费用摊销额怎么计算
  • 暂估入库企业所得税税率
  • 发票开出多久可以作废
  • 重装系统出现无效签名
  • 路由器和光猫上的无线网络名称一样吗
  • 支付劳保用品会计怎么做
  • 绿宝树的养殖方法和注意事项视频
  • wrme.exe是什么
  • To install them, you can run: npm install --save core-js/modules/es.array.push.js
  • 什么样的发票可以报销
  • linux编译安装php扩展命令
  • 开源项目有什么用
  • 办公费抵扣标准
  • 生成stl基本过程
  • 发票查真伪是什么意思
  • discuzq是个做什么
  • 带息票据和不带息票据怎么区分
  • 增值税普通发票和电子普通发票的区别
  • 物权转移手续是什么
  • 微擎框架是开源的吗
  • 待摊费用多久摊销一次
  • MyBatis MapperProvider MessageFormat拼接批量SQL语句执行报错的原因分析及解决办法
  • 将自产产品用于赠送
  • 研发费用不一致说明
  • 待抵扣进项税在贷方怎么冲掉
  • 合理的物料消耗是指
  • 原材料不足
  • 商业会计怎么做会计分录
  • 固定资产出售的收入属于收入吗
  • 上个月进项发票在哪查询
  • 现金流量表现金及现金等价物净增加额
  • 单位买另一单位的保险
  • 其它应付款为负
  • 货物发生退运了怎么办
  • 员工办理健康证介绍信模板
  • 公司帮别人代缴社保要交税吗
  • 各单位应当根据需要设立专职或者兼职
  • sql server数据库查询语句
  • linux临时目录在哪
  • 7.0 Release i386 DVD iso 下载
  • dockers容器
  • linux系统开机黑屏啥也没有
  • securecrt教程
  • 电脑ip地址设置在哪里
  • linux中快捷键
  • win7开机提示由于启动计算机时出现页面文件
  • 动态设置class
  • unity 手册
  • 微信小程序获取手机号失败
  • unity开发安卓游戏的input
  • unity3d跨平台
  • bootstrap tooltip
  • jQuery.uploadify文件上传组件实例讲解
  • linux实现shell代码
  • 安卓绘制图表
  • javascript常见问题
  • ajax 分页
  • js下拉框怎么设置
  • 北京摇号摇中了能过户吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设