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

  • 网络推广策划方案 成功五大要素(网络推广策划方案案例)

    网络推广策划方案 成功五大要素(网络推广策划方案案例)

  • 色素分子主要存在于哪里(色素构成)

    色素分子主要存在于哪里(色素构成)

  • 微信里怎下爱心雨(微信下爱心的怎么弄的)

    微信里怎下爱心雨(微信下爱心的怎么弄的)

  • 视频引流是什么意思呢(视频引流是什么软件)

    视频引流是什么意思呢(视频引流是什么软件)

  • 电脑屏幕变黑了但其他还可以显示(电脑屏幕变黑了,但桌面图标显示)

    电脑屏幕变黑了但其他还可以显示(电脑屏幕变黑了,但桌面图标显示)

  • 微信删人会被发现吗(微信删人会通知吗)

    微信删人会被发现吗(微信删人会通知吗)

  • 为什么接了OTG手机不显示mp3(为什么接了OTG手机不显示mp4)

    为什么接了OTG手机不显示mp3(为什么接了OTG手机不显示mp4)

  • 小米换电池后不快充了(小米换电池后不能充电)

    小米换电池后不快充了(小米换电池后不能充电)

  • 视频字幕乱码(视频出现乱码)

    视频字幕乱码(视频出现乱码)

  • b85主板支持什么内存条(B85主板支持什么硬盘)

    b85主板支持什么内存条(B85主板支持什么硬盘)

  • qq删好友怎么多选(qq删好友怎么一次多删)

    qq删好友怎么多选(qq删好友怎么一次多删)

  • ipadair2有笔吗(ipadair2有手写笔吗)

    ipadair2有笔吗(ipadair2有手写笔吗)

  • 手机欠费被移动收回怎么办(手机欠费移动宽带会停吗)

    手机欠费被移动收回怎么办(手机欠费移动宽带会停吗)

  • 下拉框怎么做叁金苹果(怎样做下拉选项框)

    下拉框怎么做叁金苹果(怎样做下拉选项框)

  • 手机掉了如何冻结手机(手机掉了如何冻结支付宝)

    手机掉了如何冻结手机(手机掉了如何冻结支付宝)

  • 笔记本wifi万能钥匙怎么用(笔记本wifi万能钥匙哪个好用)

    笔记本wifi万能钥匙怎么用(笔记本wifi万能钥匙哪个好用)

  • a9与a9x区别(a9和a91哪个好)

    a9与a9x区别(a9和a91哪个好)

  • ios12语音留言怎么关闭(iphone设置语音留言)

    ios12语音留言怎么关闭(iphone设置语音留言)

  • 怎么运营公众号(公众号如何运营)

    怎么运营公众号(公众号如何运营)

  • 魅族m852q是什么型号(魅族m822q是什么手机)

    魅族m852q是什么型号(魅族m822q是什么手机)

  • 魅族x8充电速度(魅族18x充电功率)

    魅族x8充电速度(魅族18x充电功率)

  • 为啥发朋友圈只显示一行字(为啥发朋友圈只能制作视频)

    为啥发朋友圈只显示一行字(为啥发朋友圈只能制作视频)

  • Win10 20H2更新报错怎么办 Win10 20H2更新错误的9种解决方法(window1020h2更新问题)

    Win10 20H2更新报错怎么办 Win10 20H2更新错误的9种解决方法(window1020h2更新问题)

  • Windows安装程序遇到错误:0x80240037的解决方法(windows安装程序无法配置在硬件上)

    Windows安装程序遇到错误:0x80240037的解决方法(windows安装程序无法配置在硬件上)

  • 购销合同中约定产品质量问题引起的问题
  • 怎么查19年以前税收
  • 差额纳税是什么税
  • 去税务局开增值税专用发票需要缴费吗
  • 投资收益包括哪些项目
  • 企业所得税1季度申报季初从业人数个税所属期12月
  • 承兑找零怎么做账务处理
  • 融资租赁本金和租金的区别
  • 可以自己制作的商品
  • 私房装修费能在公司报销吗
  • 施工企业必须要注册造价工程师吗
  • 储备基金是用来干嘛的
  • 非货币交易例子
  • 营业收入包括其收入吗
  • 出售固定资产要做收入吗
  • 税务局查到发票有问题
  • 个人到税局开具发票流程
  • 小规模纳税人0税率
  • 简易办法计税销售额如何填写
  • 分红个人所得税怎么交
  • linux使用cp
  • Mac如何开启无痕浏览
  • 独资子公司如何注册
  • win11dev预览版可以升级正式版吗
  • vue qrcode生成二维码
  • php7 数组
  • 有关增值税的计算真题
  • 项目中的问题
  • swiper.js常用功能
  • 同城票据清算和清算资金往来的区别
  • 投资者投资企业项目的主要目的是
  • 微信支付开发者平台
  • viwer.js
  • 货真价实的话
  • 董事长报销应该是怎样的流程
  • 跨年进项税额未做账
  • java一天速成
  • phpcms目录结构
  • 企业向个人提供分期的商业活动属于
  • 已抵扣发票在什么地方查
  • 金蝶固定资产折旧调整
  • 员工工资需要交税吗
  • 公司的货款直接转给股东个人了,该怎么转到公司
  • 企业应纳税额计算直接利息的应纳税额
  • 给客户送礼计入成本吗
  • 丁字账户例题及解析
  • 利润是用含税价还是去税价
  • 建筑施工企业在12个月内第三次发生生产安全事故的
  • 随同产品销售不单独计价包装物如何进行账务处理?
  • 财务会计制度及核算软件备案怎么填写
  • 经营活动产生的现金净流量怎么算
  • 出口货物没有进项发票用什么平台申报
  • sql拆分函数
  • mysql中的rand函数
  • sqlserver正则表达式替换列
  • win10系统怎么调
  • xp系统许多网页打不开
  • ubuntu 21.04 安装
  • 构建dockerfile
  • ubuntu如何读
  • 如何在mac上保存文件
  • ubuntu zed
  • 虚拟机ubuntu怎么用
  • win7诊断策略服务未运行是电脑问题还是网络
  • win10允许访问
  • windows8.1开始
  • pcalc是什么软件
  • 查看rpm包含的内容
  • android 开发 教程
  • nodejs不再维护
  • python windows gui
  • javascript面向对象编程 PDF
  • node js 开发
  • shell脚本特性
  • axios异步
  • ActivityManager: Warning: Activity not started, its current task has been brought to the front 的的问题
  • 江苏国税电子税务局打印控件
  • 我国土地资源总量丰富人均不足
  • 个人的稿酬所得采用什么税率
  • 非关税壁垒英语翻译
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设