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

  • 红米note11怎么微信分身(红米note11怎么微信美颜)

    红米note11怎么微信分身(红米note11怎么微信美颜)

  • 华为nova4e屏幕是多大(华为nova4e屏幕是哪家的)

    华为nova4e屏幕是多大(华为nova4e屏幕是哪家的)

  • 华为荣耀9xhd是什么意思(荣耀9x是lpddr4x吗)

    华为荣耀9xhd是什么意思(荣耀9x是lpddr4x吗)

  • 华为p30pro屏幕刷新率(华为p30换屏)

    华为p30pro屏幕刷新率(华为p30换屏)

  • 酷狗的vip可以2人一起用吗(酷狗的vip可以换到另外的账号上吗)

    酷狗的vip可以2人一起用吗(酷狗的vip可以换到另外的账号上吗)

  • word怎么升序排列表格内容(word怎么进行升序排列)

    word怎么升序排列表格内容(word怎么进行升序排列)

  • 三星s10无线充电功率是多大(三星s10无线充电功率)

    三星s10无线充电功率是多大(三星s10无线充电功率)

  • 音乐包可以听vip歌曲吗(音乐包可以听付费专辑吗)

    音乐包可以听vip歌曲吗(音乐包可以听付费专辑吗)

  • 局域网的软件部分主要包括(局域网的软件部分主要包括哪些)

    局域网的软件部分主要包括(局域网的软件部分主要包括哪些)

  • 打印机连接不上无线网怎么回事(打印机连接不上手机什么原因)

    打印机连接不上无线网怎么回事(打印机连接不上手机什么原因)

  • 淘宝号升3心需要评论多少个(淘宝号升级心怎么算)

    淘宝号升3心需要评论多少个(淘宝号升级心怎么算)

  • p20无线充电器能不能用(p20无线充电器能快充吗)

    p20无线充电器能不能用(p20无线充电器能快充吗)

  • e5 2430相当于什么cpu(e52430相当于什么cpu六核)

    e5 2430相当于什么cpu(e52430相当于什么cpu六核)

  • 抖音橱窗已售是什么意思(抖音橱窗已售是指自己已售吗)

    抖音橱窗已售是什么意思(抖音橱窗已售是指自己已售吗)

  • word单独设置纸张大小(word怎样单独改变纸张方向)

    word单独设置纸张大小(word怎样单独改变纸张方向)

  • 京东怎么关闭消息提醒(京东怎么关闭消息声音)

    京东怎么关闭消息提醒(京东怎么关闭消息声音)

  • oppo桌面时钟怎么添加(oppo桌面时钟怎么设置悬浮)

    oppo桌面时钟怎么添加(oppo桌面时钟怎么设置悬浮)

  • 如何在ipad找到存储的文件(怎样才能找到ipad)

    如何在ipad找到存储的文件(怎样才能找到ipad)

  • 抖音怎么开店(抖音怎么开店卖货)

    抖音怎么开店(抖音怎么开店卖货)

  • 魅族16怎么设置otg(魅族16怎么设置锁屏画图密码)

    魅族16怎么设置otg(魅族16怎么设置锁屏画图密码)

  • evadl00是什么手机(手机型号eva_dl00啥手机)

    evadl00是什么手机(手机型号eva_dl00啥手机)

  • qq上的连麦是什么意思(qq连麦是什么意思)

    qq上的连麦是什么意思(qq连麦是什么意思)

  • 荣耀20语音助手在哪里(荣耀20语音助手怎么一喊就出来)

    荣耀20语音助手在哪里(荣耀20语音助手怎么一喊就出来)

  • 苹果xr红外线怎么开(iphone xr 红外线)

    苹果xr红外线怎么开(iphone xr 红外线)

  • 如何恢复撤回的微信聊天记录(如何恢复撤回的信息微信)

    如何恢复撤回的微信聊天记录(如何恢复撤回的信息微信)

  • Bootstrap 框架详解(bootstrap框架的理解)

    Bootstrap 框架详解(bootstrap框架的理解)

  • JavaScript(WebAPI)+具体案例

    JavaScript(WebAPI)+具体案例

  • 作用域和作用域链(作用域和作用域链的理解)

    作用域和作用域链(作用域和作用域链的理解)

  • web 前端 基础HTML知识点(html前端技术)

    web 前端 基础HTML知识点(html前端技术)

  • 进项税额转出如何申报
  • 给客户开增值税专用发票
  • 各种投资之间的关系
  • 劳动合同和劳务合同有什么区别 举例
  • 残保金申报表中的上年工资总额指所属期的上一年吗
  • 国际货运代理0税率和免税
  • 所得税的营业收入包括哪些
  • 保险企业汇算清缴规定
  • 商铺出租怎么做账
  • 计税依据的三种类型
  • 延迟交款收息做什么科目?
  • 房地产开发企业会计科目
  • 箱包类增值税发票多少点
  • 企业所得税减免优惠政策
  • 进项税额转出报税填哪个表
  • 进项税额待转出是什么意思
  • 详细解读财税[2014]75号文件
  • 发票勾选 发票认证
  • 钢结构制作安装方案
  • 中国人民银行保险公司
  • 利润表本月金额怎么算
  • 办理银行承兑汇票贴现的会计分录
  • 应收票据收到了吗
  • 返利红字发票怎么开具
  • cdr插件哪个最好用
  • 收到工程结算单,怎么回复不认可
  • win11发热严重怎么解决
  • 电脑怎么更新系统日期
  • 劳务人员劳务费
  • linux禁止ip访问80端口
  • 工资里的其他应收款是什么
  • php测试成功的邮件是什么
  • retrorun.exe - retrorun有什么用 是什么进程
  • 商业折扣影响税费吗
  • 招聘退休人员北京宿管
  • 挂靠公司收费几个点
  • yii框架连接数据库
  • 申报系统异常
  • 未达起征点销售额和小微企业免税销售额
  • thinkphp import
  • pca降维的原理
  • php floatval
  • mysqldump语句
  • 融资租赁固定资产不属于筹资活动
  • 企业所得税实施条例第七条
  • 短期投资属于短期资产吗
  • 软件成本如何归类管理
  • 坏账准备的会计分录怎么写
  • 小规模纳税人企业所得税2023
  • mysql内连接查询使用汉语作为官方语言的所有国家
  • 门禁卡一般属于什么卡
  • 固定资产未入账的定性依据
  • 专票认证之后怎么做账
  • 开红字发票需要做收回原发票吗?
  • 公交公司如何做好精细化管理
  • 公司注册实收资本
  • 收入红冲够是否红冲成本
  • 从mysql导出数据
  • windos8怎么样
  • 使用筷子就餐会不会传染乙肝病毒
  • 硬盘安装操作系统出现,两个操作系统怎么选择
  • centos关闭kdump
  • deepin-win
  • windowsxp优化教程
  • linux监控软件zabbix
  • 安卓闹钟软件下载
  • webview实现有什么用
  • 批处理执行另一个批处理
  • opencv for python
  • jquery的实现原理
  • 深入理解中国式现代化
  • Unity PlayerPrefs.DeleteAll 无效以及 PlayerPrefs文件保存位置
  • OnBecameVisible和OnBecameInvisible ,OnWillRenderObject
  • 自己搭配电脑
  • flask pycharm
  • 陕西省税务局电子税务局官网
  • 居间服务费税收优惠政策
  • 税务局发票邮寄需要多久
  • 宝安区西乡税务所长
  • 普洱房产管理局官网
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设