操作系统
纸带打孔计算机
批处理 —— 磁带
  联机
  脱机
多道操作系统 —— 极大的提高了CPU的利用率
  在计算机中 可以有超过一个进程
  进程遇到IO的时候 切换给另外的进程使用CPU
  数据隔离 进程与进程之间的数据是隔离的
  时空复用 在同一时刻 多个程序宏观上的并行
分时系统 —— 反而降低了CPU的效率 提高了用户体验
  将时间分片 每一个进程都能够使用CPU一个时间片的时间
  时间片轮转 一个进程在使用cpu的时候时间片到了,
    就会切换到另一个进程
实时系统 —— 实时的响应任务
  有一个进程时时刻刻能使用CPU
个人计算机 : 多道操作系统 分时系统 实时系统
4核 —— 4个任务
4核8线程 —— 8个任务
进程
  进程的三个状态 就绪 阻塞 运行
  进程的创建和结束
  同步 异步 阻塞 非阻塞
  两个任务依次执行 —— 同步
  两个任务一起执行 —— 异步
  同步 + 阻塞
    inp = input()
    print(inp)
异步 + 非阻塞
  a.py input() 异步阻塞
  b.py print() 异步非阻塞

 

在python代码中,是从上向下执行的。它是属于同步的
同步往往是 同步+阻塞

同步总是伴随着阻塞
比如上面的例子,input都得等着用户输入

 

异步往往和非阻塞在一起

比如a.py和b.py,2个py在不同的文件中,执行互相不影响

当a.py和b.py同时执行时,就是异步非阻塞

单纯的一个py文件,没有异步非阻塞。异步非阻塞存在多个文件执行时才存在。
比如上面的例子

 

在python程序中的进程操作

  之前我们已经了解了很多进程相关的理论知识,了解进程是什么应该不再困难了,刚刚我们已经了解了,运行中的程序就是一个进程。所有的进程都是通过它的父进程来创建的。因此,运行起来的python程序也是一个进程,那么我们也可以在程序中再创建进程。多个进程可以实现并发效果,也就是说,当我们的程序中存在多个进程的时候,在某些时候,就会让程序的执行速度变快。以我们之前所学的知识,并不能实现创建进程这个功能,所以我们就需要借助python中强大的模块。

multiprocess模块

      仔细说来,multiprocess不是一个模块而是python中一个操作、管理进程的包。 之所以叫multi是取自multiple的多功能的意思,在这个包中几乎包含了和进程有关的所有子模块。由于提供的子模块非常多,为了方便大家归类记忆,我将这部分大致分为四个部分:创建进程部分,进程同步部分,进程池部分,进程之间数据共享。

 

multiprocess.process模块

process模块介绍

process模块是一个创建进程的模块,借助这个模块,就可以完成进程的创建。

Process([group [, target [, name [, args [, kwargs]]]]]),由该类实例化得到的对象,表示一个子进程中的任务(尚未启动)

强调:
1. 需要使用关键字的方式来指定参数
2. args指定的为传给target函数的位置参数,是一个元组形式,必须有逗号

参数介绍:
1 group参数未使用,值始终为None
2 target表示调用对象,即子进程要执行的任务
3 args表示调用对象的位置参数元组,args=(1,2,'egon',)
4 kwargs表示调用对象的字典,kwargs={'name':'egon','age':18}
5 name为子进程的名称

 

p.start():启动进程,并调用该子进程中的p.run() 
p.run():进程启动时运行的方法,正是它去调用target指定的函数,我们自定义类的类中一定要实现该方法  
p.terminate():强制终止进程p,不会进行任何清理操作,如果p创建了子进程,该子进程就成了僵尸进程,使用该方法需要特别小心这种情况。如果p还保存了一个锁那么也将不会被释放,进而导致死锁
p.is_alive():如果p仍然运行,返回True
p.join([timeout]):主线程等待p终止(强调:是主线程处于等的状态,而p是处于运行的状态)。timeout是可选的超时时间,需要强调的是,p.join只能join住start开启的进程,而不能join住run开启的进程  
方法介绍

相关文章:

  • 2022-01-16
  • 2021-10-06
  • 2022-02-20
猜你喜欢
  • 2022-12-23
  • 2021-09-01
  • 2021-12-09
  • 2021-06-24
  • 2021-10-18
  • 2021-08-09
  • 2021-12-07
相关资源
相似解决方案