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

  • 拼多多快捷键怎么取消(拼多多快捷入口)

    拼多多快捷键怎么取消(拼多多快捷入口)

  • 影驰主板u盘启动按f几(影驰主板u盘启动按f9没反应)

    影驰主板u盘启动按f几(影驰主板u盘启动按f9没反应)

  • .cc是哪里的网站(cc是什么网站后缀)

    .cc是哪里的网站(cc是什么网站后缀)

  • 怎么找到微博的草稿箱(怎么找到微博的群)

    怎么找到微博的草稿箱(怎么找到微博的群)

  • qq被删了自己知道吗(qq被删了自己知道吗知乎)

    qq被删了自己知道吗(qq被删了自己知道吗知乎)

  • 小米手环为什么微信信息来没有提示(小米手环为什么总是断开连接)

    小米手环为什么微信信息来没有提示(小米手环为什么总是断开连接)

  • 华为nova6se充电速度(华为nova6se充电器多少瓦)

    华为nova6se充电速度(华为nova6se充电器多少瓦)

  • oppor17原装充电器头型号(oppor17原装充电头)

    oppor17原装充电器头型号(oppor17原装充电头)

  • 为什么下载软件之后一直在安装不了(为什么下载软件下载不了)

    为什么下载软件之后一直在安装不了(为什么下载软件下载不了)

  • 家用7类网线有必要吗(家用7类网线有几根线)

    家用7类网线有必要吗(家用7类网线有几根线)

  • 举报显示网络异常是怎么回事(网络举报不实怎么解决)

    举报显示网络异常是怎么回事(网络举报不实怎么解决)

  • 数据有效性如何设置男女(数据有效性如何设置三级下拉)

    数据有效性如何设置男女(数据有效性如何设置三级下拉)

  • 联通短信发不出去是什么原因(联通短信发不出去了怎么设置)

    联通短信发不出去是什么原因(联通短信发不出去了怎么设置)

  • 三星s10e支持多少w快充(三星s10e支持多少瓦无线充电)

    三星s10e支持多少w快充(三星s10e支持多少瓦无线充电)

  • 快手怎么删自己的视频(快手怎么删自己的视频短片)

    快手怎么删自己的视频(快手怎么删自己的视频短片)

  • ytmodel是什么文件夹

    ytmodel是什么文件夹

  • 华为如何播rmvb(华为如何播放设wmv格式)

    华为如何播rmvb(华为如何播放设wmv格式)

  • u盘有黑胶芯片音质好吗(u盘有黑胶芯片能用吗)

    u盘有黑胶芯片音质好吗(u盘有黑胶芯片能用吗)

  • 旺旺红包怎么领取(旺旺红包在哪领取)

    旺旺红包怎么领取(旺旺红包在哪领取)

  • vivox23卡顿原因(vivox23反应慢怎么回事)

    vivox23卡顿原因(vivox23反应慢怎么回事)

  • 苹果手机怎么改时间24小时(苹果手机怎么改时间和日期)

    苹果手机怎么改时间24小时(苹果手机怎么改时间和日期)

  • 信息删除了怎么找回(信息删除了怎么找回来)

    信息删除了怎么找回(信息删除了怎么找回来)

  • reminder.exe - reminder是什么进程 有什么用

    reminder.exe - reminder是什么进程 有什么用

  • 维多利亚瀑布上的彩虹,赞比亚 (© Dietmar Temps/Shutterstock)(维多利亚瀑布有多高?多宽?)

    维多利亚瀑布上的彩虹,赞比亚 (© Dietmar Temps/Shutterstock)(维多利亚瀑布有多高?多宽?)

  • 【YOLO系列】YOLOv2论文超详细解读(翻译 +学习笔记)(yolo s)

    【YOLO系列】YOLOv2论文超详细解读(翻译 +学习笔记)(yolo s)

  • 车船税征税范围口诀
  • 研发支出属于什么科目借贷方向
  • 兼职会计负责的工作内容
  • 财务报表怎么重新做
  • 小规模纳税人实收资本
  • 党费奖励需要交个税吗
  • 月销售额不超过10万
  • 已认证未抵扣的进项怎么填写
  • 工资代扣款项是什么意思
  • 医院业务支出包括哪些内容科目
  • 研发加计扣除的标准
  • 民间非营利组织会计科目
  • 企业盈利后又亏损怎么算
  • 文化传媒公司的经营模式怎么写
  • 汉字防伪企业是哪家
  • 美国税改“梦想”很丰满,显示很骨感
  • 专票入账暂不抵扣如何申报
  • 待摊费用在资产负债表中怎么填
  • 企业停工期间发放工资
  • 费用跨年的分录怎么做
  • 其他权益工具投资交易费用计入哪里
  • 疫情 统筹
  • 收到合同款
  • Linux中RedHat CentOS Ubuntu Fedora的区别详解
  • cpu主频在哪看
  • php如何实现伪静态
  • php输出一维数组
  • linux is
  • 公司收到个人入股股金,然后又投资其他公司怎么做账
  • explorer.exe是啥意思
  • 商业一般纳税人标准
  • 怎么登记总分类账簿
  • 个税六项专项扣除是什么
  • fsdu.exe是什么程序?
  • php字符串在另一个字符串出现
  • php -v
  • html表白代码动态
  • 03-JavaScript基础
  • 应纳税所得额100-300万税率
  • 行政性收费和事业性收费 财政局
  • 发票第三联是什么颜色
  • 应付票据是供应商往来吗
  • 商业承兑汇票的流程
  • 企业所得税弥补亏损怎么弥补
  • 某项目施工成本计划如下图,则5月末
  • 财务管理考试时间不够怎么办
  • 门市装修费用会计处理
  • 权益性投资收益确认收入时间
  • 权益法核算投资收益纳税调整
  • 什么是调表不调账
  • 建筑单位工伤缴费标准
  • 出口样品的销售好做吗
  • 支付贷款利息属于筹资活动吗
  • 去年亏损今年盈利怎么弥补
  • 个体户能开建筑劳务发票吗
  • 施工期间水电费没有发票财务不给报销
  • .NET Framework SQL Server 数据提供程序连接池
  • xp系统安装软件参数不正确怎么解决
  • 使用灭火器时要对准火焰的什么部位喷射
  • alg.exe是什么程序
  • 文本文本
  • vmware15.5安装mac
  • windows8.1 preview
  • win10预览版
  • vim编辑器命令大全
  • windows更新后风扇不转
  • grep的结果 再次查找
  • css中选择符
  • Node.js中的construct构造函数
  • nodejs socket hang up
  • javascript获取css
  • shell数据处理
  • shell脚本加密不可破解
  • jQuery中通过ajax的get()函数读取页面的方法
  • python语句查询
  • jquery datatable排序
  • 江苏国家电子税务局网站
  • 宁德市蕉城区地图全图最新
  • 宁夏电子税务局官网登录入口首页
  • 集团收管理费开什么发票
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设