python-day30(进程 验证空间隔离)
一. 进程
进程:我们自己在python文件中写了一些代码,这叫做程序,运行这个python文件的时候,
这叫做进程。
进程调度: 遵循 操作系统 规定的法则, 调度算法 链接
并发: 是伪并行, 即看起来是同时运行. 单个CPU+多道技术就可以实现并发,(并行也属于并发)
并行: 同时运行, 只有具备多个cpu才能实现并行
同步\异步\阻塞\非阻塞(重点)
同步: 其实就是一个程序结束才执行另外一个程序,串行的
异步: 异步是不需要等待被依赖的任务完成, 只是通知被依赖的任务要完成什么工作,依赖的任务也立即执行,只要自己完成了整个任务就算完成了.
阻塞/非阻塞
排队等待的时候,等待者除了等待消息通知之外不能做其他的事情, 那么该机制就是阻塞的等待者没有阻塞在这个消息通知上,而是一边做自己的事情一边等待, 这是非阻塞
1. 同步阻塞形式
效率最低,就是专心排队, 什么别的事都不做
2. 异步阻塞形式
取餐的人领了一张小纸条,假如在这等待的时间里他不能做其他的事情,就坐那里等着,
这个人被阻塞在了这个等待的操作上面;
异步操作是可以被阻塞住的,只不过他不是在处理消息是阻塞,而是在等待消息通知时被阻塞
3. 同步非阻塞形式
实际上是效率低下的
想象一下你一边打着电话一边还需要抬头看 到底排到你了没有, 如果把打电话和观察队伍的位置
看成是程序的两个操作的话, 这个程序需要在这两种不同的行为之间来回切换,效率可想而知是
低下的
4. 异步非阻塞形式
效率更高
比如说,这个人突然发觉自己烟瘾犯了,需要出去抽根烟,于是他告诉点餐员说,排到我这个号码的时候麻烦到外面通知我一下,那么他就没有被阻塞在这个等待的操作上面,自然这个就是异步+非阻塞的方式了。
操作系统发展史简单介绍(略过)
第一代(1940~1955) 手工操作 ---- 穿孔卡片
第二代(1955~1965) 磁带储存 ---- 批处理系统
1. 联机批处理
2. 脱机批处理系统
第三代(1955~1965) 多道程序系统(********)
1. 多道程序设计技术
2. 多道批处理系统
3. 分时系统
4. 实时系统
5. 通用操作系统
第N代(1980~至今) 现代计算机
1. 个人计算机操作系统
2. 网络操作系统
3. 分布式操作系统
#一 操作系统的作用:1:隐藏丑陋复杂的硬件接口,提供良好的抽象接口2:管理、调度进程,并且将多个进程对硬件的竞争变得有序#二 多道技术:1.产生背景:针对单核,实现并发ps:现在的主机一般是多核,那么每个核都会利用多道技术有4个cpu,运行于cpu1的某个程序遇到io阻塞,会等到io结束再重新调度,会被调度到4个cpu中的任意一个,具体由操作系统调度算法决定。2.空间上的复用:如内存中同时有多道程序3.时间上的复用:复用一个cpu的时间片强调:遇到io切,占用cpu时间过长也切,核心在于切之前将进程的状态保存下来,这样才能保证下次切换回来时,能基于上次切走的位置继续运行
二. 进程的两种创建方法(**********) multiprocess模块
进程的创建
1 #当前文件名称为test.py 2 # from multiprocessing import Process 3 # 4 # def func(): 5 # print(12345) 6 # 7 # if __name__ == '__main__': #windows 下才需要写这个,这和系统创建进程的机制有关系,不用深究,记着windows下要写就好啦 8 # #首先我运行当前这个test.py文件,运行这个文件的程序,那么就产生了进程,这个进程我们称为主进程 9 # 10 # p = Process(target=func,) #将函数注册到一个进程中,p是一个进程对象,此时还没有启动进程,只是创建了一个进程对象。并且func是不加括号的,因为加上括号这个函数就直接运行了对吧。 11 # p.start() #告诉操作系统,给我开启一个进程,func这个函数就被我们新开的这个进程执行了,而这个进程是我主进程运行过程中创建出来的,所以称这个新创建的进程为主进程的子进程,而主进程又可以称为这个新进程的父进程。 12 #而这个子进程中执行的程序,相当于将现在这个test.py文件中的程序copy到一个你看不到的python文件中去执行了,就相当于当前这个文件,被另外一个py文件import过去并执行了。 13 #start并不是直接就去执行了,我们知道进程有三个状态,进程会进入进程的三个状态,就绪,(被调度,也就是时间片切换到它的时候)执行,阻塞,并且在这个三个状态之间不断的转换,等待cpu执行时间片到了。 14 # print('*' * 10) #这是主进程的程序,上面开启的子进程的程序是和主进程的程序同时运行的,我们称为异步
View Code
进程的创建(第二种方法)
1 from multiprocessing import Process 2 import os 3 4 class MyProcess(Process): #自己写一个类,继承Process类 5 #我们通过init方法可以传参数,如果只写一个run方法,那么没法传参数,因为创建对象的是传参就是在init方法里面,面向对象的时候,我们是不是学过 6 def __init__(self,person): 7 super().__init__() 8 self.person=person 9 def run(self): 10 print(os.getpid()) 11 print(self.pid) 12 print(self.pid) 13 print('%s 正在和女主播聊天' %self.person) 14 # def start(self): 15 # #如果你非要写一个start方法,可以这样写,并且在run方法前后,可以写一些其他的逻辑 16 # self.run() 17 if __name__ == '__main__': 18 p1=MyProcess('Jedan') 19 p2=MyProcess('太白') 20 p3=MyProcess('alexDSB') 21 22 p1.start() #start内部会自动调用run方法 23 p2.start() 24 # p2.run() 25 p3.start() 26 27 28 p1.join() 29 p2.join() 30 p3.join()
View Code
三. 进程之间是空间隔离的(验证)
1 #我们说进程之间的数据是隔离的,也就是数据不共享,看下面的验证 2 from multiprocessing import Process 3 n=100 #首先我定义了一个全局变量,在windows系统中应该把全局变量定义在if __name__ == '__main__'之上就可以了 4 def work(): 5 global n 6 n=0 7 print('子进程内: ',n) 8 9 if __name__ == '__main__': 10 p=Process(target=work) 11 p.start() 12 p.join() #等待子进程执行完毕,如果数据共享的话,我子进程是不是通过global将n改为0了,但是你看打印结果,主进程在子进程执行结束之后,仍然是n=100,子进程n=0,说明子进程对n的修改没有在主进程中生效,说明什么?说明他们之间的数据是隔离的,互相不影响的 13 print('主进程内: ',n) 14 15 #看结果: 16 # 子进程内: 0 17 # 主进程内: 100
View Code
四. os.getpid() os.getppid()
#os.getpid() 获取自己进程的ID号 #os.getppid() 获取自己进程的父进程的ID号
join(只有在join的地方才会阻塞住,将子进程和主进程之间的异步改为同步)
1 from multiprocessing import Process 2 3 def func(): 4 print(12345) 5 6 if __name__ == '__main__': 7 p = Process(target=func) 8 p.start() 9 p.join()#阻塞住,将子进程和主进程之间的异步改为同步 10 print('*'*10)
View Code
进程
并发 = 任务切换 + 保存状态
转自cls超
转载于:https://www.cnblogs.com/Thui/p/10027937.html
python-day30(进程 验证空间隔离)相关推荐
- day030进程的两种创建方法,验证进程的空间隔离,join等待子进程
本节内容: 1.操作系统的简单介绍 2.进程的两种创建方法 3.进程之间是空间隔离的, 参考文章: 一.操作系统的简单介绍 1.操作系统简单介绍 操作系统就是一个协调.管理和控制计算机硬件资源和软件资 ...
- python之进程和线程的对比
python之进程和线程的对比 1. 进程和线程的对比的三个方向 关系对比 区别对比 优缺点对比 2. 关系对比 线程是依附在进程里面的,没有进程就没有线程. 一个进程默认提供一条线程,进程可以创建多 ...
- python使用正则表达式验证邮箱地址语法有效性
python使用正则表达式验证邮箱地址语法有效性 #python使用正则表达式验证邮箱地址语法有效性 import re # mail regular expression formula# rege ...
- python使用正则表达式验证用户输入密码的有效性
python使用正则表达式验证用户输入密码的有效性 条件: 1,最少有8位 2,字母范围a到z 3,至少有一个字母时大写的 4,至少有一个数字 5,至少有一个特殊字符(_.@.$) #密码验证的条件 ...
- Python实例浅谈之五Python守护进程和脚本单例运行
一.简介 守护进程最重要的特性是后台运行:它必须与其运行前的环境隔离开来,这些环境包括未关闭的文件描述符.控制终端.会话和进程组.工作目录以及文件创建掩码等:它可以在系统启动时从启动脚本/etc/rc ...
- Python当前进程信息 (os包)
Python当前进程信息 (os包) 我们在Linux的概念与体系,多次提及进程的重要性.Python的os包中有查询和修改进程信息的函数.学习Python的这些工具也有助于理解Linux体系. 进程 ...
- 在linux下python爬虫进程发生异常时自动重启直至正常结束的方法
在linux下python爬虫进程发生异常时自动重启直至正常结束的方法 参考文章: (1)在linux下python爬虫进程发生异常时自动重启直至正常结束的方法 (2)https://www.cnbl ...
- Python守护进程和脚本单例运行
2019独角兽企业重金招聘Python工程师标准>>> 一.简介 守护进程最重要的特性是后台运行:它必须与其运行前的环境隔离开来,这些环境包括未关闭的文件描述符.控制终端.会话和进程 ...
- python的进程线程和协程_python成长之路 :线程、进程和协程
python线程 进程与线程的历史 我们都知道计算机是由硬件和软件组成的.硬件中的CPU是计算机的核心,它承担计算机的所有任务. 操作系统是运行在硬件之上的软件,是计算机的管理者,它负责资源的管理和分 ...
最新文章
- 2021年春季学期-信号与系统-第四次作业参考答案-MATLAB实验1
- Kubernetes源码分析之kubelet
- leetcode117. 填充每个节点的下一个右侧节点指针 II(层序遍历08)
- 【算法设计与分析】15 分治策略:芯片测试
- 3成失眠者放下手机才能睡 说中你了吗?
- CentOS 6.5静态IP的设置(NAT和桥接联网方式都适用)
- qq降龙v5java_java编辑器
- 登记车架号/VIN码用车架号识别
- WiFi的商业运作模式
- TPS54231DR IC REG BUCK ADJUSTABLE 2A 8SOIC
- 【ROS系列】运行rosrun topic_demo talker出错
- 爬虫百度百万高清美图源代码
- 3DMAX入门需要什么基础?中英文版本?
- 编程语言静态/动态类型,强/弱定义分类以及七种程序错误类型
- (codewars)Simple Pig Latin
- php模板注入漏洞,74CMS前台模板引擎注入漏洞漏洞复现
- 一文尽揽2018谷歌I/O大会:AI很酷 Android P拯救睡前玩手机综合症
- matlab实现航班进离场排序,航班离场排序问题的遗传算法设计
- 一年吸引200+公司团建,小程序为何口碑爆炸?
- java使用unicode过滤emoji表情
热门文章
- 利用MS计算水分子的径向分布和扩散系数
- 负数10进制转2进制c语言,负数的二进制转换方法
- 普通人怎么干项目才能赚到第一桶金?
- Android平台HTTPS抓包解决方案及问题分析,移动网页开发工具
- 怎么把语音转成文字查看
- oracle的sga和pga大小设置
- 计算机关机什么中的信息全部丢失,断电之后,信息全部丢失的是( )。A.RAMB.ROMC.软盘D.硬盘 - 作业在线问答...
- 【数据分析】UTM参数
- 微擎微信支付php,微擎小程序配置微信支付教程【小程序配置微信支付】
- 抛弃4S店:快修店终结汽车售后暴利?