从0基础学习Python(27)[Python中多任务及进程的介绍]

Python中多任务的介绍

什么是多任务

在python中所了解到的函数执行,遇到多个函数的调用,会产生的问题是按照函数的调用顺序挨个执行调用,基本上不可能出现两个函数同时执行。

我们缩写的程序都是单任务,一个函数或者方法的执行完成,另一个函数或者方法才能继续执行。如果想要多个函数或方法同时执行需要使用多任务

多任务的最大好处就是充分利用CPU,提高程序的执行效率

多任务的概念

多任务是指在同一时间内执行多个任务。一个任务可以视为一个应用程序。目前的操作系统都是多任务的操作系统,可以同时运行着多个软件

多任务的执行方式

  1. 并发
  2. 并行
并发

在一段时间内交替去执行任务

例如:对于单核cpu处理多任务:操作系统会轮流让哥哥软件交替执行,假如A软件执行0.01s,切换到B软件再执行0.01s,再切换到C软件执行0.01s…反复执行下去。表面上看这些软件都是同时在执行,但是真实情况是轮流挨个执行的。因为目前的CPU计算速度非常快,感觉不到。

注意;单核CPU只能使用并发执行多任务

并行

对于多核CPU而言处理多任务,操作系统会给CPU的每个内核安排一个执行的软件,多个内核才是真正的一起执行软件。注意多核CPU是并行的执行多任务,始终有多个软件一起执行

进程

进程的介绍

在Python程序中,想要实现多任务可以使用进程来完成,进程是实现多任务的一种方式

进程的概念

一个正在运行的程序或者软件就是一个进程,进程也是操作系统进行资源分配的最基本单位,也就是说每次启动一个软件(进程)操作系统都会给其分配一定的运行资源(内存资源)保证其正常工作运行

比如:生活中的工厂(计算机),每一个车间是一个进程,工厂提供资源(占地面积、电力设备等),真正能够干活的是车间员工,员工可以理解为线程

一个程序运行至少有一个进程,一个进程默认有一个线程,进程里面可以创建多个线程,线程是依附在进程里面的,没有进程就没有线程

进程的作用

单进程

默认程序运行创建一个进程

一个Python文件运行,就是开启一个进程去处理

进程中的场景:主线程去执行代码

多进程

一个Python文件运行,占用一个进程去处理,假如同时要运行第二个Python文件,同样给第二个Python文件开启一个进程去处理

多进程可以完成多任务,每个进程就好比一个独立车间,每个车间都各自在运营,每个进程也是各自在运行,执行各自的任务

多进程的使用

导入进程包
import multiprocessing
Process进程类的说明

Process([group,target,name,args,kwargs])进程类的构造

  1. group:指定进程组,目前只能使用None
  2. target:执行的目标任务名称
  3. name:进程的名字
  4. args:以元祖方式给执行的任务传递参数
  5. kwargs:以字典方式给执行的任务传递参数

Process创建的实例对象常用的方法

  1. start():启动子进程实例(启动创建子进程)
  2. join():等待子进程执行结束,相当于给这个进程做了一个单独检测的功能,当这个子进程执行完毕之后主进程才继续往后执行
  3. terminate():不管任务是否完成,立即终止子进程

Process创建的实例对象常用的属性

name:当前进程的别名,默认为Process-N,N为从1开始的递增整数

Process中的kill发方法
在这里插入图片描述

获取进程编号

进程编号的作用

进程的编号的目的是验证主进程和子进程的关系,可以得知子进程是由哪个主进程创建出来的

获取进程编号的方式
  1. 获取当前进程的编号

    使用os.getpid()获取当前进程的编号

  2. 获取当前父进程的编号

    使用os.getppid()获取当前父进程的编号

所有的子进程都来自于父进程,因此一个程序中的主进程编号得知,子进程编号按照主进程编号为起始值加一计算

multiprocessing.current_process()方法获取当前的当前进程的详细信息(进程名称和进程编号)

进程的特性

进程特性介绍
  1. 进程之间不共享全局变量
  2. 主进程会等待所有的子进程结束之后再结束
不共享全局变量

当一个进程对全局变量进行数据的修改,对于其他进程而言不会造成任何的影响,可以理解为每个进程都拿的是最初始的全局变量。或者可以理解为全局变量就是所谓资源,当创建一个进程,则系统会直接给这个进程里面复制一个全局变量。针对于这个全局变量而言,在进程之间都是相互独立存在的,之间没有任何的联系在这里插入图片描述

三个进程分别操作的都是自己进程内部的全局变量test_list,不会对其他的进程里面的全局变量造成影响,所以进程之间不共享全局变量。他们的关系只有一点,不同进程之间的全局变量的名字相同而已

所有子进程结束主进程才会结束

主进程会等待所有的子进程执行结束之后才能结束

在主进程结束之前,手动结束了所有的子进程,那么程序的结束由主进程的结束来控制

如果需要实现主进程结束则整个程序结束:

  1. 在主进程结束之前,保证所有子进程结束使用子进程的terminate()
  2. 在子进程开启之前,设置当前子进程被被主进程守护,子进程的deamon属性设为true则意味着这个子进程被主进程守护,主进程结束守护结束,子进程也结束

实现主进程结束则整个程序结束:

  1. 在主进程结束之前,保证所有子进程结束使用子进程的terminate()
  2. 在子进程开启之前,设置当前子进程被被主进程守护,子进程的deamon属性设为true则意味着这个子进程被主进程守护,主进程结束守护结束,子进程也结束

Day27-------END

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值