01什么是线程?

线程是操作系统能够进行运算调度的最小单位,它隶属于进程之中,也有人叫它轻量级进程。线程自己没有系统资源,它可与同属一个进程的其它线程共享进程中的资源,同一进程中的多个线程可以并发运行。

python 语言中内置了 threading 库对多线程功能的支持,从而简化 Python 语言的多线程编程。

02线程实现

普通创建线程的方法

在程序中引入 thrading 库,实现创建一个简单的线程

初始化一个线程

threading.Thread(target=run, args=("t1",))

调用 start 方法启动线程

当线程启动之后,会调用 run 方法,执行打印传入线程的参数信息

这是运行结果

thread.is_alive() 查看线程是否正在运行

thread.join() 连接到某个线程上,join 会等待该线程结束,解释器会一直保持运行,直到所有的线程都终结为止。

守护线程

当需要长时间或一直不断在后台运行任务时,这就需要考虑守护线程,将线程设置为 daemon。

t1 = threading.Thread(target=run, args=("t1",), daemon=True)

在初始化线程时设置 daemon 为 True ,开启守护线程。daemon 线程是无法被 join 的,当主线程结束后就会自动销毁掉。

03为什么使用多线程

线程在程序中是相对独立的执行流,与分隔的进程相比,线程具有轻量级、灵活、支持并发、线程与线程之间可以通信等优点。线程与线程之间隔离度小,共享句柄、内存和其它进程应有的状态。

因为线程相对于进程有以上诸多优点,在应用程序开发中使用多线程技术就会极大地提高应用程序的效率。多个线程共享内存,节约了系统资源,使一个进程下可以并发地运行多个线程,完成搞了高效的系统计算能力。

线程与线程之间更利于通信,一个应用程序的功能并不是也一般不会存在孤立的存在,不同功能模块之间需要进行数据交互,也可能需要同时运行,这就得依靠多线程与线程与线程之间的通信来完成。

操作系统创建进程时,需要单独的为进程分配独立的内存空间,而线程就相对简单很多。在操作系统中,内存资源是有限的,如何将有限的资源最大化利用,这就得让我我们考虑如何合理、灵活地运用多线程技术来实现。

总结

1、进程之间不能共享系统资源,进程与进程之间的通信业比较麻烦,相比线程就灵活很多;

2、操作系统在创建进程时,需要重新为进程分配资源,而操作系统中的资源有限,创建线程相对于创建进程就要好很多;

3、多个线程共享资源,可并发运行,相对于进程来说,运行效率就会高了不少。

感谢你的阅读,欢迎关注作者,作者会不定期更新 Python 硬核知识。

python销毁线程_聊聊 Python 中的线程相关推荐

  1. python split()方法_聊聊 Python 的单元测试框架(一):unittest

    本文首发于 HelloGitHub 公众号,并发表于 Prodesire 博客. 前言 说到 Python 的单元测试框架,想必接触过 Python 的朋友脑袋里第一个想到的就是 unittest. ...

  2. 进程handle获取线程_获取进程中的线程列表

    进程handle获取线程 The System.Diagnostics namespace contains functions that allow you to manage processes, ...

  3. python 时间序列预测_使用Python进行动手时间序列预测

    python 时间序列预测 Time series analysis is the endeavor of extracting meaningful summary and statistical ...

  4. python 概率分布模型_使用python的概率模型进行公司估值

    python 概率分布模型 Note from Towards Data Science's editors: While we allow independent authors to publis ...

  5. python中计算带分数_聊聊 python 数据处理全家桶(Redis篇)

    作者:星安果 来源:AirPython 前面两篇文章聊到了 python 处理 Mysql.Sqlite 数据库常用方式,本篇文章继续说另外一种比较常用的数据存储方式:Redis Redis:Remo ...

  6. python 强制结束线程_在python中实现强制关闭线程的示例

    Python 如何强制关闭线程过去只可以用来回忆,别沉迷在阴影中,否则永远看不清前面的路. Python用sleep停止一个线程的运行,而不影响主线程的运行,案例代码如下: from threadin ...

  7. python遍历循环怎么理解_聊聊python中的循环遍历

    python之循环遍历 关于循环遍历大家都知道,不外乎for和while,今天我在这写点不一样的循环和遍历.在实践中有时会遇到删除列表中的元素,那么循环遍历列表删除指定元素该怎么做呢? 还是直接上代码 ...

  8. python 批量创建线程_【Python】批量创建线程

    在<[Python]线程的创建.执行.互斥.同步.销毁>(点击打开链接)中介绍了Python中线程的使用,但是里面线程的创建,使用了很原始的方式,一行代码创建一条.其实,Python里是可 ...

  9. python面试设计模式问题_聊聊 Python 面试最常被问到的几种设计模式(上)

    1. 前言 在很多人的印象里,Python 作为一款动态编程语言,在日常开发中也很少涉及到设计模式 事实上,任何一个编程语言都可以使用设计模式,它可以保证代码的规范性,只是每一种语言的实现方式略有不同 ...

最新文章

  1. Spring Boot 属性配置和使用
  2. 【S操作】轻松优雅防止(解决)两次掉进同一坑的完美解决方案
  3. OpenCV如何启用Halide后端以提高效率
  4. 使用Spring Boot和Spring MVC自定义HttpMessageConverters
  5. 设置QtreeWidget水平滚动条
  6. HIVE高级函数--get_json_object()和json_tuple()
  7. 解决 phpmyadmin #2002 无法登录 MySQL 服务器
  8. SpringMVC 环境搭建
  9. 一键安装nginx(auto_nginx_install.sh
  10. 【图像检测】基于matlab GUI比值+归一化+相关系数遥感图像【含Matlab源码 737期】
  11. 港股分时交易数据 API 接口
  12. RISC-V MCU + 盲人智能导航系统
  13. CATIA二次开发—视图及视点
  14. 不积跬步无以至千里,反思
  15. vue树形权限菜单_vue实现树形菜单步骤说明
  16. 1062: 最大公约数 Python
  17. 时间格式YYYYMM与yyyyMM的区别
  18. css table自适应斜线
  19. Cisco(64)——路由策略综合
  20. layui怎么给下拉框赋值_layui给select下拉框赋值

热门文章

  1. 预充电电路工作原理_变频冰箱开关电源电路工作原理及检修。
  2. 定时执行sql统计数据库连接数并记录到表中
  3. struts1.2上传文件到服务器
  4. java集合类练习_JAVA集合类练习
  5. 计算机系统安装要点,电脑重新装系统要注意哪些要点 重装系统时的六大事项...
  6. php隔行符,PHP PHP_EOL 换行符
  7. pdo query获取mysql单行结果_php代码连不上mysql的可能?看看这个也许能给你点启发...
  8. swagger OAuth认证
  9. zabbix提示错误:zabbix server is not running: the information displayed may not be current
  10. [置顶] SPL讲解(6)--Condition篇