python多线程和多进程关系详解


Posted in Python onDecember 14, 2020

关于多线程的大概讲解:

在Python的标准库中给出了2个模块:_thread和threading,_thread是低级模块不支持守护线程,当主线程退出了时,全部子线程都会被强制退出了。而threading是高级模块,用作对_thread进行了封装支持守护线程。在大部分状况下人们只需要采用threading这个高级模块即可。

关于多进程的大概讲解:

多进程是multiprocessing模块给出远程与本地的并发,在一个multiprocessing库的采用场景下,全部的子进程全是由一个父进程运行来的,这个父进程变成madter进程,它会管理一系列的对象状态下,如果一旦这个进程退出了,子进程很可能处在一个不稳定的状态下,那么这个父进程尽量要少做事来维持其稳定性

所以python多线程和多进程的区别如下:

多线程中,全部子线程的进程号一样;多进程中,不一样的子进程进程号不一样

线程共享内存空间;进程的内存是独立的

多线程可以共享全局变量,多进程做不到

同一个进程的线程之间可以直接交流;2个进程想通信,必须通过一个中间代理来实现

一个线程可以控制和操作同一进程里的其他线程;但是进程只能操作子进程

创建新线程很简单;创建新进程需要对其父进程进行一次克隆

内容扩展:

python多进程、多线程之联系与区别

进程

概念:进程是操作系统分配资源的最小单元

理解:一个应用程序至少包括1个进程,每个进程在执行过程中拥有独立的内存单元,python的多进程编程主要依靠multiprocess模块。

进程间通信:首先,进程间是可以相互通信的,比较常见的有七种通信方式,如管道pipe、命名管道FIFO、消息队列MessageQueue、共享内存SharedMemory、信号量Semaphore、套接字Socket、信号 signal(由于实际开发涉及较少,这里只作简单介绍)但是通常进程之间是相互独立的,每个进程都有独立的内存。通过共享内存(nmap模块),进程之间可以共享对象,使多个进程可以访问同一个变量(地址相同,变量名可能不同)。多进程共享资源必然会导致进程间相互竞争,所以应该尽最大可能防止使用共享状态。

线程

概念:线程是操作系统调度的最小单元

理解:1个进程包括1个或多个线程,相比较之下,线程占用资源更少,更高效,且一个进程的多个线程在执行过程中共享内存,毫无疑问,线程之间可以相互通信。而python的多进程编程主要依靠threading模块

线程间通信:主要有两种方式,一种是上锁,上互斥锁确保任意时刻只有一个线程具备修改全局变量的能力。另一种则是使用消息队列,比较经典的生产者、消费者模型就是这样,一个负责生成,一个负责消费,所生成的产品存放在queue里,实现了不同线程间沟通。

多进程跟多线程的区别

由于进程的创建跟销毁都涉及到系统资源的分配以及回收,导致多进程的开销明显大于多线程的开销。

两者的应用场景

对CPU密集型代码(比如循环计算) - 多进程效率更高

对IO密集型代码(比如文件操作,网络爬虫) - 多线程效率更高

理由:对于IO密集型操作,大部分消耗时间其实是等待时间,在等待时间中CPU是不需要工作的,那你在此期间提供双CPU资源也是利用不上的,相反对于CPU密集型代码,2个CPU干活肯定比一个CPU快很多。那么为什么多线程会对IO密集型代码有用呢?这时因为python碰到等待会释放GIL供新的线程使用,实现了线程间的切换。

到此这篇关于python多线程和多进程关系详解的文章就介绍到这了,更多相关python多线程和多进程之间的联系内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python 解析html之BeautifulSoup
Jul 07 Python
Python列表append和+的区别浅析
Feb 02 Python
python基于Tkinter库实现简单文本编辑器实例
May 05 Python
python3抓取中文网页的方法
Jul 28 Python
python利用标准库如何获取本地IP示例详解
Nov 01 Python
python 矩阵增加一行或一列的实例
Apr 04 Python
PyQt5实现简单数据标注工具
Mar 18 Python
安装docker-compose的两种最简方法
Jul 30 Python
基于python 等频分箱qcut问题的解决
Mar 03 Python
Django微信小程序后台开发教程的实现
Jun 03 Python
python如何提升爬虫效率
Sep 27 Python
Appium+Python实现简单的自动化登录测试的实现
Jan 26 Python
Python Pandas list列表数据列拆分成多行的方法实现
Dec 14 #Python
pandas将list数据拆分成行或列的实现
Dec 13 #Python
pandas按照列的值排序(某一列或者多列)
Dec 13 #Python
详解pandas中利用DataFrame对象的.loc[]、.iloc[]方法抽取数据
Dec 13 #Python
pandas抽取行列数据的几种方法
Dec 13 #Python
python3.9实现pyinstaller打包python文件成exe
Dec 13 #Python
Pandas中两个dataframe的交集和差集的示例代码
Dec 13 #Python
You might like
php设置静态内容缓存时间的方法
2014/12/01 PHP
php微信高级接口群发 多客服
2016/06/23 PHP
jquery 事件冒泡的介绍以及如何阻止事件冒泡
2012/12/25 Javascript
jquery中each方法示例和常用选择器
2014/07/08 Javascript
JavaScript实现的GBK、UTF8字符串实际长度计算函数
2014/08/27 Javascript
JavaScript实现点击自动选择TextArea文本的方法
2015/07/02 Javascript
js判断移动端是否安装某款app的多种方法
2015/12/18 Javascript
jQuery中的基本选择器用法学习教程
2016/04/14 Javascript
jquery制做精致的倒计时特效
2016/06/13 Javascript
郁闷!ionic中获取ng-model绑定的值为undefined如何解决
2016/08/27 Javascript
jquery实现图片平滑滚动详解
2017/03/22 jQuery
webpack的tree shaking的实现方法
2019/09/18 Javascript
JavaScript对象属性操作实例解析
2020/02/04 Javascript
[41:52]2018DOTA2亚洲邀请赛3月29日 小组赛A组 TNC VS OpTic
2018/03/30 DOTA
Python学习笔记整理3之输入输出、python eval函数
2015/12/14 Python
Python Sql数据库增删改查操作简单封装
2016/04/18 Python
Python爬虫实例爬取网站搞笑段子
2017/11/08 Python
用python的requests第三方模块抓取王者荣耀所有英雄的皮肤实例
2017/12/14 Python
python批量替换页眉页脚实例代码
2018/01/22 Python
Python多线程threading和multiprocessing模块实例解析
2018/01/29 Python
使用anaconda的pip安装第三方python包的操作步骤
2018/06/11 Python
python3.6 如何将list存入txt后再读出list的方法
2019/07/02 Python
基于python实现雪花算法过程详解
2019/11/16 Python
django数据模型on_delete, db_constraint的使用详解
2019/12/24 Python
Python 统计位数为偶数的数字代码详解
2020/03/15 Python
python模块内置属性概念及实例
2021/02/18 Python
Dower & Hall官网:英国小众轻奢珠宝品牌
2019/01/31 全球购物
伯克斯奥特莱斯:Burkes Outlet
2019/03/30 全球购物
STAUD官方网站:洛杉矶独有的闲适风格
2019/04/11 全球购物
大型主题婚礼活动策划方案
2014/09/15 职场文书
2014财务人员自我评价范文
2014/09/21 职场文书
党的群众路线教育实践活动个人对照检查材料
2014/09/22 职场文书
80后婚前协议书范本
2014/10/24 职场文书
金榜题名主持词
2015/07/02 职场文书
2015年党务工作者个人工作总结
2015/10/22 职场文书
vue里使用create, mounted调用方法
2022/04/26 Vue.js