标签:结束 开启 process 批处理 僵尸 存在 roc war .com
一 进程的概念
1 进程和程序的区别:程序就只是一段代码,在硬盘上的一堆文件,进程就时正在运行的程序的过程,进程是有优先级的过程。
一个程序别执行几次就会产生几个进程
二 并发和并行
什么时并发:看起来是多个程序一起执行,但其实是堕饿鬼程序在内存中切换着执行
什么是并行:同时多个CPU同时执行多个程序
如图:
三 阻塞和非阻塞
阻塞:卡住,就是在执行一个程序的时候,需要从硬盘中寻找一些资料,在寻找资料的同时会将程序挂起,这个停止的过程就是阻塞。
非阻塞:没有被卡住,一个程序启动,需要的资料已经全部读到了内存,不需要再去从硬盘中寻找,直接执行出了程序的结果,这就叫做非阻塞。
阻塞和非阻塞针对的就是进程和线程,阻塞就是将程序挂起,非阻塞就是不会挂起当前的进程。
四 进程的状态
一个进程有三种状态,分别是:进程态,阻塞态和就绪态
1进程挂起是自身原因,遇到I/O阻塞,就会让出CPU让其他的程序执行,这样就不会浪费CPU的执行。
2 与进程无关,就是在操作层面,某个程序占用的CPU时间过长,或者优先级的原因,调用CPU去执行其他的程序。
五 进程的创建
1 操作系统的初始化
2 一个进程在执行的过程中开启了堕饿鬼子进程,而进程是操作系统造的。
3 在用户的交互请求,创建一个进程
4 批处理初始化
无论哪一种,新进程的创建都是由一个已经存在的进程执行了一个用于创建进程的系统调用而创建的。
六 multiprocessing模块 多进程模块
Process:multiprocessing模块下的一个类,开启进程
target:Process里面的一个方法,后面跟要开启的进程名
args:后面是传入参数以元组的格式
kwargs:传入参数,以字典的格式
start:执行子程序
基本格式:子进程=multiprocessing.Process(target=进程,args=(参数,))
子进程.start()
# import multiprocessing # import time # def func(a): # print(111) # time.sleep(2) # print(222) # if __name__==‘__main__‘: # p=multiprocessing.Process(target=func,args=(1,)) # p.start() # print(444)
注意:主进程要等待子进程结束过后,才能结束,因为主进程要在子进程执行结束后关闭掉在这个程序。
僵尸进程:在子进程没有执行完,而主进程已经挂掉了,而这些还没有执行完的子进程就是僵尸进程。
在进程类里面默认起一个名(run)
# import multiprocessing # import time # class Func(multiprocessing.Process): # def run(self): # print(111) # time.sleep(3) # print(222) # if __name__==‘__main__‘: # p=Func() # p.start() # print(333)
主进程的父id就是python
主进程和父进程都有自己的内存空间。
join:等待子进程执行完过后再执行主进程。
termainate:干掉进程
is_alive:是否已干掉进程
name:进程名
pid:进程id
import multiprocessing import time import os def func(): print(111,os.getpid(),os.getppid()) time.sleep(1) if __name__==‘__main__‘: p1=multiprocessing.Process(target=func) p2=multiprocessing.Process(target=func) p3=multiprocessing.Process(target=func) p1.start() p2.start() p3.start() p1.join() p2.join() p3.join() print(444,os.getpid(),os.getppid())
标签:结束 开启 process 批处理 僵尸 存在 roc war .com
原文地址:http://www.cnblogs.com/fangjie0410/p/7635256.html