位置: IT常识 - 正文

Python中的线程和多线程是什么(python线程和协程)

编辑:rootadmin

推荐整理分享Python中的线程和多线程是什么(python线程和协程),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:python 线程,python中的线程和进程的区别,python线程和协程,python 线程,python线程和协程,python中的线程和进程,python 线程,python 线程,内容如对您有帮助,希望把文章链接给更多的朋友!

一、线程的概念

一个进程里面至少有一个控制线程,进程的概念只是一种抽象的概念,真正在CPU上面调度的是进程里面的线程,就好比真正在地铁这个进程里面工作的实际上是地铁里面的线程,北京地铁里面至少要有一个线程,线程是真正干活的,线程用的是进程里面包含的一堆资源,线程仅仅是一个调度单位,不包含资源。

什么时候需要开启多个线程:一个进程里面的多个线程共享这个进程里面的资源,因此如果多个任务共享同一块资源的时候,需要开启多个线程。 多线程指的是,在一个进程中开启多个线程,简单的说:如果多个任务共用同一个资源空间,那么必须在一个进程内开启多个线程。一个进程这个任务里面可能对应多个分任务,如果一个进程里面只开启一个线程的话,多个分任务之间实际上是串行的执行效果,即一个程序里面只含有一条执行路径。

对于计算密集型应用,应该使用多进程;对于IO密集型应用,应该使用多线程。线程的创建比进程的创建开销小的多。

二、Python中线程的特点

1.在其他语言当中,一个进程里面开启多个线程,每个线程都可以给一个cpu去使用,但是在 python当中,在同一时刻,一个进程当中只能有一个线程处于运行状态。

2.比如在其他语言当中,比如我现在开启了一个进程,这个进程当中含有几个线程,如果我现在有多个cpu,每一个线程是可以对应相应的CPU的。

3.但是在python当中,如果我们现在开启了一个进程,这个进程里面对应多个线程,同一时刻只有一个线程可以处于运行状态。 对于其他语言而言,在多CPU系统中,为了限度的利用多核,可以开启多个线程。 但是Python中的多线程是利用不了多核优势的。

4.在同一个进程当中,多个线程彼此之间可以相互通信;但是进程与进程之间的通信必须基于IPC这种 消息的通信机制(IPC机制包括队列和管道)。在一个进程当中,改变主线程可能会影响其它线程的行为,但是改变父进程并不会影响其它子进程的行为,因为进程与进程之间是完全隔离的。 在python当中,在同一时刻同一进程当中只能同时有一个线程在运行,如果有一个线程使用了系统调用而阻塞,那么整个进程都会被挂起。

Python中的线程和多线程是什么(python线程和协程)

三、多线程的理解

多进程和多线程都可以执行多个任务,线程是进程的一部分。线程的特点是线程之间可以共享内存和变量,资源消耗少(不过在Unix环境中,多进程和多线程资源调度消耗差距不明显,Unix调度较快),缺点是线程之间的同步和加锁比较麻烦。

相关推荐:《Python视频教程》

四、Python多线程创建

在Python中,同样可以实现多线程,有两个标准模块thread和threading,不过我们主要使用更高级的threading模块。使用例子:

importthreadingimporttimedeftarget():print'thecurentthreading%sisrunning'%threading.current_thread().nametime.sleep(1)print'thecurentthreading%sisended'%threading.current_thread().nameprint'thecurentthreading%sisrunning'%threading.current_thread().namet=threading.Thread(target=target)t.start()t.join()print'thecurentthreading%sisended'%threading.current_thread().name

输出:

thecurentthreadingMainThreadisrunningthecurentthreadingThread-1isrunningthecurentthreadingThread-1isendedthecurentthreadingMainThreadisended

start是启动线程,join是阻塞当前线程,即使得在当前线程结束时,不会退出。从结果可以看到,主线程直到Thread-1结束之后才结束。

Python中,默认情况下,如果不加join语句,那么主线程不会等到当前线程结束才结束,但却不会立即杀死该线程。如不加join输出如下:

thecurentthreadingMainThreadisrunningthecurentthreadingThread-1isrunningthecurentthreadingMainThreadisendedthecurentthreadingThread-1isended

但如果为线程实例添加t.setDaemon(True)之后,如果不加join语句,那么当主线程结束之后,会杀死子线程。

代码:

importthreadingimporttimedeftarget():print'thecurentthreading%sisrunning'%threading.current_thread().nametime.sleep(4)print'thecurentthreading%sisended'%threading.current_thread().nameprint'thecurentthreading%sisrunning'%threading.current_thread().namet=threading.Thread(target=target)t.setDaemon(True)t.start()t.join()print'thecurentthreading%sisended'%threading.current_thread().name

输出如下:

thecurentthreadingMainThreadisrunningthecurentthreadingThread-1isrunningthecurentthreadingMainThreadisended

如果加上join,并设置等待时间,就会等待线程一段时间再退出:

importthreadingimporttimedeftarget():print'thecurentthreading%sisrunning'%threading.current_thread().nametime.sleep(4)print'thecurentthreading%sisended'%threading.current_thread().nameprint'thecurentthreading%sisrunning'%threading.current_thread().namet=threading.Thread(target=target)t.setDaemon(True)t.start()t.join(1)

输出:

thecurentthreadingMainThreadisrunningthecurentthreadingThread-1isrunningthecurentthreadingMainThreadisended

主线程等待1秒,就自动结束,并杀死子线程。如果join不加等待时间,t.join(),就会一直等待,一直到子线程结束,输出如下:

thecurentthreadingMainThreadisrunningthecurentthreadingThread-1isrunningthecurentthreadingThread-1isendedthecurentthreadingMainThreadisended

相关推荐:

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

上一篇:前端动画实现以及原理浅析(前端动画库)

下一篇:c语言中数组访问越界如何理解(c语言中数组怎么用)

  • 网络推广如何抓取流量,网络推广员集中推广方式(网络推广的五种方法)

    网络推广如何抓取流量,网络推广员集中推广方式(网络推广的五种方法)

  • airpods pro轻点怎么设置(airpodspro怎么轻击)

    airpods pro轻点怎么设置(airpodspro怎么轻击)

  • 微星主板驱动下哪几个(微星主板驱动下载)

    微星主板驱动下哪几个(微星主板驱动下载)

  • oppoace2屏幕多大(oppoace2屏幕比例是多少)

    oppoace2屏幕多大(oppoace2屏幕比例是多少)

  • 按下什么键可以启动幻灯片放映(按下什么键可以展开所有关键帧)

    按下什么键可以启动幻灯片放映(按下什么键可以展开所有关键帧)

  • 路由器怎么关闭(路由器怎么关闭双频合一模式)

    路由器怎么关闭(路由器怎么关闭双频合一模式)

  • 承载lte需要打开吗(承载系统lte打开费流量吗)

    承载lte需要打开吗(承载系统lte打开费流量吗)

  • mac外放没声音了(苹果电脑没声音按哪个键恢复)

    mac外放没声音了(苹果电脑没声音按哪个键恢复)

  • 在excel中文本型数据默认的对齐方式是(在Excel中文本型数据包括)

    在excel中文本型数据默认的对齐方式是(在Excel中文本型数据包括)

  • 苹果11微信发语音会突然弹出音量图标怎么回事(苹果11微信发语音显示时间太短)

    苹果11微信发语音会突然弹出音量图标怎么回事(苹果11微信发语音显示时间太短)

  • 怎么通过链接找到网站(怎么通过链接找到id)

    怎么通过链接找到网站(怎么通过链接找到id)

  • 为什么qq气泡不能用了(为什么QQ气泡不是永久的)

    为什么qq气泡不能用了(为什么QQ气泡不是永久的)

  • vivoz5处理器型号(vivoiqz5处理器)

    vivoz5处理器型号(vivoiqz5处理器)

  • oppoa11x怎么恢复微信聊天记录(oppoa11x怎么恢复出厂设置)

    oppoa11x怎么恢复微信聊天记录(oppoa11x怎么恢复出厂设置)

  • 淘宝淘金币在哪里(淘宝淘金币在哪里领取)

    淘宝淘金币在哪里(淘宝淘金币在哪里领取)

  • soul怎么给关注聊天(soul怎么让关注你的人取关呢)

    soul怎么给关注聊天(soul怎么让关注你的人取关呢)

  • realme手机有nfc功能吗(realme手机nfc功能)

    realme手机有nfc功能吗(realme手机nfc功能)

  • 删除退群后消息还在吗(删除退出群聊后消息会消失吗)

    删除退群后消息还在吗(删除退出群聊后消息会消失吗)

  • mp3播放器从哪里下载音乐(mp3里的播放模式在哪里)

    mp3播放器从哪里下载音乐(mp3里的播放模式在哪里)

  • pr中的防抖效果在哪里(pr中的防抖效果是什么)

    pr中的防抖效果在哪里(pr中的防抖效果是什么)

  • 小程序有啥功能(小程序有什么功能)

    小程序有啥功能(小程序有什么功能)

  • 双卡一个卡突然没有了(双卡一个卡突然没有了vivo)

    双卡一个卡突然没有了(双卡一个卡突然没有了vivo)

  • 总结JS中常用的数组的方法大全(总结js中常用的字符)

    总结JS中常用的数组的方法大全(总结js中常用的字符)

  • 进项税额加计抵减5%
  • 应交税费会计分录怎么做明细科目
  • 外币收入的增值税是多少
  • 内账会计会承担法律责任吗
  • 其他收益和营业收益
  • 出售的固定资产通过固定资产清理吗
  • 开模费用计入什么科目
  • 金蝶打印凭证页码范围
  • 公司报销费用发票怎么开
  • 进货有商业折扣商品怎么入库
  • 失业稳岗补贴要交所得税吗
  • 联通租赁官网
  • 收到3%的增值税专用发票可以抵扣吗
  • 捐赠个人支出需要交纳个税吗?
  • 小规模纳税人需要汇算清缴吗
  • 酒类消费税征收环节归纳
  • 个人代开普通发票需要出税费吗?
  • 如何正确理解新制度经济学与新古典经济学的关系
  • 个税申报系统操作流程app
  • 费用无发票财务怎么做账
  • 转账支票存根属于银行回单吗
  • 专用发票抵扣联丢失怎么办最新规定
  • 企业所得税三项费用扣除
  • 与工程有关的差旅费是否可以计入在建工程呢?
  • 两年利润都为负数,如何计算完成率
  • 查账征收企业所得税季报怎么填
  • 预提费用的会计分录2018
  • 降低win10版本
  • 废品损失账户借方反映
  • 积分抵现金活动怎么做
  • 苹果14如何强制关机重启
  • 继承和赠与算夫妻共同财产吗
  • 建筑企业自持商是指
  • 车辆理赔过程中,赔付款给谁
  • 直接计入当期利润的利得,即企业非日常
  • msmpeng.exe是什么进程
  • 税务登记 申报
  • 在php中,什么函数能将数组转化为字符串
  • php怎么与mysql连接
  • 浅谈PHP发送HTTP请求的几种方式
  • 哪些情况即使取消核酸
  • 分包工程账务处理
  • “普罗旺斯”
  • 转出未交增值税最终怎么转平
  • 建筑业为什么要报统计局
  • php登录不了
  • 运营级别划分
  • 工会经费为0是不用申报的?
  • 房地产开发企业建造的商品房,在出售前
  • 兼职人员的个税怎么计算
  • 免征增值税个税计税依据
  • 外购的商品赠送客人是否销售吗
  • 其他应收款余额在贷方什么意思
  • 专利补贴收入计入什么科目
  • 销售出库和产品入库有什么关系
  • 商业汇票的会计核算
  • 水电费收据可以入公司帐吗
  • 金税盘费用抵扣账务处理
  • 产成品入库的单据是什么
  • 勘探费用会计分录
  • mysql类型varchar长度
  • sqlserver2000怎么用
  • 高危补丁该不该修补
  • centos直接安装
  • centos怎么设置密码
  • centos内存占用进程
  • win8.1进入桌面
  • linux卸载repo
  • win10系统开机重装教程
  • xcode怎么新建项目
  • Node.js中的事件循环是什么
  • 在javascript中关于alert confirm
  • jquery动画效果代码
  • unity?
  • jquery悬浮显示
  • 福建电子税务局社保缴费操作
  • 纳税人分类分级管理四个匹配
  • 小规模纳税人可以开13%的发票吗
  • 社保工资申报错了可以重新申请吗
  • 国税手撕发票图片
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设