Python之进程基础介绍

北京中科白癜风医院靠谱么 http://m.39.net/baidianfeng/a_5154121.html

一、进程概念与状态进程是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统基础的结构。早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。进运行程状态分为就绪、执行、阻塞我们程序能直接控制的只有阻塞状态,减少阻塞,使进程尽可能地保持在就绪状态,提高效率1、就绪(Ready)状态当进程已分配到除CPU以外的所有必要的资源,只要获得CPU处理机便可立即执行,这时进程状态称为就绪状态。2、执行/运行(Running)状态当进程已获得处理机,其程序正在处理机上执行,此时的进程状态称为执行状态。3、阻塞(Blocked)状态正在执行的进程,由于等待某个事件发生而无法执行时,便放弃处理机而处于阻塞状态。引起进程阻塞的时间有多种,例如:等待I/O完成、申请缓冲区不能满足、等待信件(信号)等

二、守护进程主进程创建在后台运行的进程1:守护进程会在主进程代码执行结束后就终止2:守护进程内无法再开启子进程,否则抛出异常:AssertionError:daemonicprocessesarenotallowedtohavechildren注意:进程之间是互相独立的,主进程代码运行结束,守护进程随即终止

三、Python中的进程1、  Python.exe与Pythonw.exe在python安装后在目录下存在Python.exe与Pythonw.exe两个文件用于启动python解释器进程下面说说这2个进程Python.exe:其中Python.exe是纯python运行环境,Python安装的时候已经与cmd控制台进行了关联用于重定向输出也就是说在控制台运行运行python文件在调用python.exe运行后时可以把信息输出至cmd控制台我们使用的pycharm信息输出也是在后台调用Python.exe与cmd控制台窗口进程相关联进行信息输出的Pythonw.exe:Pythonw.exe处可以运行具备Python.exe功能外还可以运行Python的GUI界面程序我们使用Python自带的IDLE编辑器启动后台运行的就是Pythonw.exe进程2、Python进程编程Python中的进程编程需导入multiprocessing这个模块,然后通过multiprocessing.Process方法创建新进程,multiprocessing支持spawn、fork、forkserver三种方式启动一个进程。windows只支持spawn方式所谓的spawn方式指的是在主进程中先启动Python解释器进程然后把进程运行所需的资源加载即可。进程与主进程的Python解释器同等地位并不是以复制主进程的方式启动的这里的Python解释器进程包括Python.exe与Pythonw.exe

四、进程创建实例1、语法:multiprocessing.Process(group=None,target=None,name=None,args=(),kwargs={},*,daemon=None)2、说明:multiprocessing.Process返回的是当前运行的进程实例group=None:这里省略它的存在仅仅是与线程threading.Thread方法兼容target:进程实例的run()方法调用的可对象可以是自定义函数或者自定义类也就是进程中运行的代码块执行run()方法时候调用自定义函数或者自定义类name:自定义的进程名定这个参数不定义的话,则默认名字为Process-x(x是序号)args:是目标调用的参数元组(自定义函数或者自定义类的元组参数)kwargs:是目标调用的关键字参数字典(自定义函数或者自定义类的字典参数)daemon:设置false表示创建的进程为前台运行的进程设置true表示创建的进程为后台运行的守护进程,守护进程不能创建自己的新进程daemon如果为空,将从上级进程继承在调用start()方法之前设置3、常用方法:run():执行multiprocessing.Process方法中target参数指向的自定义函数或自定义类start():启动创建进程,在创建的进程中自动调用run()方法join([timeout]):调用后阻塞主进程,也就是创建的进程运行结束主进程才可以继续运行参数timeout表示最多阻塞的超时秒数join方法应该在start()方法后调用name:进程名称,缺省值为Process-N1:N2:…:Nk形式is_alive():返回进程是否活动的daemon:进程的守护进程标志,默认继承主进程pid:返回进程IDexitcode:进程的退出码authkey:进程的身份验证密钥(二进制字符串)新创建的进程默认继承主进程的值sentinel:系统对象的数字句柄,当进程结束时将变为就绪(Ready)状态Terminate():终止进程但不释放进程占用的资源也不清理由此进程创建的进程此进程占用锁的话也不会被释放,进而导致死锁注意事项:只用进程实例的run()方法只是在主进程当中执行自定义的函数或类。并没有创建新进程,创建新进程必须使用start()方法start()方法在新进程中自动执行run()方法关于在IDLE编辑器运行创建的进程print方法无法输出信息的问题是因为IDLE后台只调用Pythonw.exe解释器进程并没有对应的cmd控制台窗口进程与之相关联4、实例:

实例说明:从主进程分别运行了函数和类创建的2个进程但是对于函数的进程使用了join方法使它优先与主进程运行。类的进程因为没有使用所以在主进程之后运行。显示:




转载请注明:http://www.aierlanlan.com/rzgz/1404.html