python多任务编程之多进程编程

多任务编程:

意义:充分利用计算机资源,同时运行多个任务,提高程序
整体的运行效率
定义:通过程序利用计算机的多个核心 达到同时执行多个任务的目的
以此达到提升程序运行效率的目的
实施方案:多进程编程 多线程编程

并行:多个计算机核心在同时处理多个任务,这时多个任务之间是并行关系

并发:同时运行多个任务,内核在多个任务间不断切换,达到多个任务都会被执行处理的效果,

进程:程序在计算机中的一次执行过程
程序:是一个可执行文件,是静态的,占有磁盘,不占计算机
的运行资源
进程:进程是一个动态的过程,占有计算机资源,有一定的生命周期
*同一个程序不同的运行过程是不同的进程,因为分配的资源
和生命周期都不相同

进程的创建流程:

1.用户启动一个程序或者调用接口发起进程创建
2.操做系统接收用户请求分配计算机资源创建进程
3.操做系统将一定状态的进程提高给用户使用
4.用户利用操做系统提供的进程完成任务

进程相关的概念:

cpu时间片:
如果一个进程占有cpu此时我们称为该进程占有cpu时间片
多个进程任务会轮流占有cpu时间片形成并发效果

进程信息:
PCB (进程空值块):进程创建后会自动在内存生产一个空间存放进程信息
进程信息:进程ID 进程占用内存位置 创建时间 创建用户
查看系统该进程信息:ps -aux
PID(process ID):在操做系统中每个进程都有唯一的PID值是由系统分配的。

进程特征
*进程是操做系统分配资源的最小单元
*每个进程拥有自己独立的运行空间(虚拟内存空间)
*进程之间运行相互独立,互不影响

进程的状态

三态
*就绪态:进程具备执行条件,等待系统分配处理器,资源进入运行状态
*运行态:进程占有cpu处于运行状态
*等待态:进程暂时不具备运行条件,需要阻塞等待
五态(三态基础上添加新建和终止)
*新建:创建一个新的进程,获取系统资源的过程
*终止:进程执行结束,释放资源的过程

ps -aux ————–> STAT表示进程状态

D:表示等待态 阻塞 不可中断等待态
S:表示等待态 睡眠 可中断等待态
T:表示等待态 暂停 暂停执行
R:运行态(就绪态)
Z:僵尸

+:前台进程
<:较高优先级的进程
N:较低优先级的进程
s:会话组
l:有进程连接

进程的优先级:

top 动态查看进程的优先级
< > 进行翻页 q退出
进程优先级的取值范围:-20 ~ 19 -20最高
nice:以指定的优先级运行一个程序
nice -9 ./while.py 表示以9的优先级运行
sudo –9 ./while.py 表示以-9优先级运行

cookie
首行添加

!/usr/bin/python3

修改程序权限,添加可执行权限
chmod 775 while.py
可以直接指明路经执行
./while.py

父子进程

在系统中除了初始化进程每个进程都有一个父进程,可能有0和或多个
子进程,由此形成进程额度父子关系
便于进程管理,父进程发起创建子进程请求

查看进程树:pstree
查看父子进程PID:ps -ajx

要求:
1.了解什么是进程,进程和程序的区别
2.了解进程的特征和基本概念
3.理解并发并行的区别
4.清楚进程的状态转换

os.fork 创建进程

pid = os.fork()
功能:创建进程
返回值:失败返回一个负数
成功在原有进程中返回新进程的PID号,在新进程中返回0

*子进程会复制符进程全部内存空间包括代码段
*子进程会从fork的下一句开始执行
*父进程中fork返回值即为新创建子进程额度PID号
*父子进程不一定谁先执行。执行上互不干扰抢占时间片
*使用if语句结构是父子进程执行不同代码段几乎是fork
创建进程的固定结构
*在子进程中对变量等其他内容的修改 不会影响父进程中的内容
*子进程虽然复制父进程内容,但是业有自己特有的属性特征
比如:pid号 pcb内存空间等

获取进程PID

os.getpid()
功能:获取进程的PID号
返回值:返回进程的PID号

os.getppid()
功能:获取符进程的pid号
返回值:返回符进程的PID号

进程退出

os._exit(status)
功能:退出一个进程
参数:进程的退出状态 整数
sys.exit([status])
功能:退出一个进程
参数:默认为0
如果传入一个整数则同 _exit()
如果传入一个字符串,则在退出时打印该字符串
**sys.exit() 可以通过捕获 SystemExit异常来阻止退出
os._exit()不能通过异常阻止

猜你喜欢

转载自blog.csdn.net/wanglijuan2/article/details/81541498