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

  • 合伙企业税务筹划点
  • 律师事务所的所训
  • 服务费的增值税怎么算
  • 货币资金应计入什么科目
  • 行政职工福利费包括哪些内容呢
  • 生产企业发票单位
  • 托管开票
  • 城镇土地使用税纳税义务发生时间
  • 红字信息表已核销不允许撤销
  • 租赁设备出口怎么处理?
  • 房地产开发结转成本条件
  • 销售亏损原因分析范文
  • 提取职工福利费计入什么科目
  • 增值税普通发票和普通发票的区别怎么交税
  • 私车公用油费计入什么科目
  • 企业的商品产品包括
  • 全额计提坏账的款项收回
  • 维修开票单位写什么
  • 物流公司增项
  • 土地转让应交税费
  • 什么时候不能计入开办费
  • 电脑系统权限管理在哪里
  • dsm是什么文件
  • 年度所得税报表在哪里查到
  • php目录操作
  • 最早能玩游戏的人
  • 赤狐,荷兰 (© Wim Weenink/Minden Pictures)
  • 油猴脚本插件官网
  • opencv开发项目
  • 什么是大语言模型(LLM)?
  • metareplace -e
  • 小规模纳税人可以开专票吗
  • 政府补贴什么时候开始的
  • 航天远程清卡
  • 帝国cms如何使用
  • 预缴税款为什么不能跨月申报
  • 年度结转增值税
  • 普票 销项
  • 福利部门领用材料计入什么科目
  • sql server 2008简介
  • 弃置费用的财务费用计算
  • 主营业务成本的摘要怎么写
  • 怎么才能获得音乐
  • 无票收入小规模怎么做账,要交税吗?
  • 车船税去哪里交
  • 高新技术企业外债便利化额度试点重庆
  • 增值税的视同销售行为有哪些?
  • 采购材料未付款填什么凭证
  • 企业在建工程领用自产应税消费品成本为10000元
  • 建筑业暂估成本票来了后的账务处理
  • 我国流转税有哪些
  • 长期待摊费用摊销计算公式
  • 企业的培训费用
  • 退回多交增值税账务处理小规模
  • 软件开发技术服务合同
  • 商品流通企业有哪些企业
  • win8旗舰版升级win10
  • 金山卫士电脑版
  • 远程关机对话框怎么打开
  • 虚拟机ubuntu怎么用
  • windows无法访问\\192.168.1.104
  • win8一直在开始界面
  • win7系统纯净版64位无法修改窗口颜色怎么办?Win7窗口颜色修改详细步骤
  • Linux系统如何创建目录
  • awk实现wc功能
  • 移动手机指令
  • Node.js中的核心模块包括哪些内容?
  • node+express+ejs制作简单页面上手指南
  • 利用感情骗取钱财算诈骗吗
  • Unity3D之Vector3.Dot和Vector3.Cross的使用
  • Linux中的host命令应用实例详解
  • shell脚本中获取参数
  • 基于jQuery Ajax实现上传文件
  • jQuery实现Select左右复制移动内容
  • js的ajax请求写法
  • js 上下文
  • 公司买社保公司倒闭了怎么办
  • 没工作个人所得税
  • 补办契税需要哪些资料
  • 土地增值税分期清算条件?
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设