位置: 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语言中数组怎么用)

  • 腾讯课堂如何打开摄像头(腾讯课堂如何打开链接)

    腾讯课堂如何打开摄像头(腾讯课堂如何打开链接)

  • 抖音发作品可以定位到外省吗(抖音发作品可以不显示位置吗)

    抖音发作品可以定位到外省吗(抖音发作品可以不显示位置吗)

  • 荣耀9x充电功率(荣耀9x充电功率是多少瓦)

    荣耀9x充电功率(荣耀9x充电功率是多少瓦)

  • 小米钱包怎么下载(小米钱包在哪下载软件)

    小米钱包怎么下载(小米钱包在哪下载软件)

  • arcgis的基本功能(arcgis基本知识)

    arcgis的基本功能(arcgis基本知识)

  • 钉钉外勤打卡是什么意思(钉钉外勤打卡是不是在哪里都可以)

    钉钉外勤打卡是什么意思(钉钉外勤打卡是不是在哪里都可以)

  • 华为用安卓系统吗(华为用安卓系统的手机)

    华为用安卓系统吗(华为用安卓系统的手机)

  • 手机红外被异常遮挡怎么办(手机红外被异常遮挡怎么去除)

    手机红外被异常遮挡怎么办(手机红外被异常遮挡怎么去除)

  • 怎样转发语音聊天记录给别人(怎样转发语音聊天记录到微信)

    怎样转发语音聊天记录给别人(怎样转发语音聊天记录到微信)

  • 抖音如何提现(抖音如何提现佣金)

    抖音如何提现(抖音如何提现佣金)

  • 荣耀30支持光学防抖吗(华为荣耀30多少倍光学变焦)

    荣耀30支持光学防抖吗(华为荣耀30多少倍光学变焦)

  • 手机和电热毯哪个辐射大(手机和电热毯哪个费电)

    手机和电热毯哪个辐射大(手机和电热毯哪个费电)

  • 新版网易云音乐话题怎么查找(新版网易云音乐云盘在哪)

    新版网易云音乐话题怎么查找(新版网易云音乐云盘在哪)

  • 视频源格式错误怎么解决(视频源格式错误怎么办qq浏览器)

    视频源格式错误怎么解决(视频源格式错误怎么办qq浏览器)

  • 另存为怎么操作(word文件另存为怎么操作)

    另存为怎么操作(word文件另存为怎么操作)

  • 样式模板在哪(样式模板在哪里)

    样式模板在哪(样式模板在哪里)

  • 淘宝差评删除是不是就没办法再评论了

    淘宝差评删除是不是就没办法再评论了

  • 安卓怎么给苹果传软件(安卓怎么给苹果传照片)

    安卓怎么给苹果传软件(安卓怎么给苹果传照片)

  • 苹果11处理器是几核(苹果11处理器是多少核)

    苹果11处理器是几核(苹果11处理器是多少核)

  • vivos5采用什么屏幕(vivos5是lcd屏幕吗)

    vivos5采用什么屏幕(vivos5是lcd屏幕吗)

  • 魅族多任务窗口在哪里(魅族多任务窗口怎么设置)

    魅族多任务窗口在哪里(魅族多任务窗口怎么设置)

  • 淘宝联合登录有风险吗(淘宝联盟登录失败怎么回事)

    淘宝联合登录有风险吗(淘宝联盟登录失败怎么回事)

  • 抖音竖屏尺寸是多少(抖音竖屏尺寸是多少比例)

    抖音竖屏尺寸是多少(抖音竖屏尺寸是多少比例)

  • 安卓手机airpods盒子电量怎么看(安卓手机airpods怎么关闭触控)

    安卓手机airpods盒子电量怎么看(安卓手机airpods怎么关闭触控)

  • 魅族15哪一年出的(魅族15刚上市多少钱)

    魅族15哪一年出的(魅族15刚上市多少钱)

  • 怎么理解5g时代的来临说明了什么(怎么理解5g时代的概念)

    怎么理解5g时代的来临说明了什么(怎么理解5g时代的概念)

  • 苹果7如何截屏(苹果7如何截屏截长图)

    苹果7如何截屏(苹果7如何截屏截长图)

  • 使用axis调用WebService,Java WebService调用工具类(客户端调用axis1.4的方式)

    使用axis调用WebService,Java WebService调用工具类(客户端调用axis1.4的方式)

  • 企业可否自行决算利润
  • 税会差异产生的原因
  • 撤回或减少投资同撤资减资的区别
  • 建筑企业预交的附加税怎么办
  • 维修费开票属于哪个大类
  • 印花税自查补缴要先申报吗
  • 企业筹办期间发生的开办费会计分录
  • 贴现率和折现率一样吗
  • 企业所得税纳税调增调减怎么确定
  • 所有增值税发票都有抵扣联吗
  • 交易性金融资产的账务处理
  • 存货项目包括哪些具体内容
  • 公司收到的其他发票
  • 公司购入的房子如何抵押
  • 收到供应商发票的会计处理怎么做?
  • 今年补缴去年的税汇算清缴吗
  • 公司怎么申请开票资格?
  • 车辆租赁费用标准
  • 开物流公司能挣多少钱
  • 员工与单位解除劳动合同书范本
  • 企业会计准则应用案例
  • 用现金发工资不给怎么办
  • 增值税发票二联折叠票样式
  • 发票过期作废不了怎么办
  • 耕地占用税与土地出让金
  • 金税盘减免政策依据
  • 股权更改需要什么费用
  • 华为matex3用什么芯片
  • 固定资产可以一次折旧完吗
  • 进项票与实际支出金额不符
  • 品牌使用费分录
  • 收到客户付款 会计分录
  • 费用已付款跨年怎么做账
  • win11如何修复
  • 如何修改家里的wifi密码
  • VUE -- defineExpose
  • php csrf攻击
  • idea如何运行vue项目
  • 公司收加盟费合法吗?
  • web前端开发html代码
  • remote远程
  • 代理电信业务属于什么行业
  • 总公司发票可以从分公司付款吗
  • 冲红怎么做会计科目
  • 出口货物不能退税的账务处理
  • 事务所的账务处理
  • 林木的培育和种植免征企业所得税
  • 增值税进项加计抵减怎么计算
  • 哪些情况不能开专用发票
  • 一般纳税人收到的普票可以抵扣吗
  • 私车公用费用报销是否违规
  • 其他业务收入借贷方向表示
  • 信用卡账单最低还款额是什么意思
  • 老板怎么从公户拿钱
  • 可供出售金融资产公允价值变动
  • 企业股东的出资方式
  • 银行对账单和回单有什么区别
  • sqlserver的主数据库是什么
  • 调整服务能力的策略不包括什么
  • mac安装路径选择
  • window10的dns异常
  • win7同步中心怎么关掉
  • windows无法配置在此硬件上运行
  • win8操作系统界面
  • win8系统怎么设置开机密码
  • win7系统打印服务怎么开启
  • win10系统误删文件怎么恢复
  • unix网络命令
  • 正二十面体怎么建模
  • div css table
  • nodejs自启动
  • 网页制作范例
  • jQuery插件库
  • python 控制台交互
  • python数据结构之数组
  • 河北电子税务局移动端
  • 商标注册图形查询
  • 价税分离计算公式
  • 没有核定印花税可以按次申报吗
  • 湖北低保查询网站官网
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设