一:什么是进程
我们想通过网易云音乐听歌,具体的过程就是应该先找到这个程序 然后双击后点击播放音乐。当我们双击的时候,操作系统系统将程序装载到内存中,操作系统为他分配资源,然后才能运行。运行起来的应用程序我们称之为进程,也就是说当程序不运行的时候称之为程序,当程序运行起来他就是一个进程,通俗的理解就是不运行的时候称之为程序,运行的时候称之为进程。进程与程序的关系:程序只有一个 但是进程可以有很多个
二:创建多进程
1.不使用多进程实现控制台打印唱歌然后再打印跳舞
2.使用进程让唱歌和跳舞同时进行
进程池
当需要创建的子进程不多时,我们可以通过multiprocessing中的Process动态生成多个进程,但是如果现在有100个任务需要处理,那我们需要创建多少个子进程呢,虽然我们可以创建一百个子进程进行实现,但是比较浪费资源,这样的情况下我们就可以通过multiprocessing模块提供的Pool类也就是进程池,可以达到进程的重复利用。
创建进程池对象的时候可以指定一个最大进程数,当有新的请求提交到进程池中的时候 如果进程池中的进程没有满,那么就能创建一个新的进程用来执行改请求,但是如果进程池中的进程满的话,那么改请求就会进行等到状态,等进程池的进程有结束的了,才会使用这个结束的进程来执行新的任务
close:等待所有进程结束才关闭进程池
join:主进程等待所有子进程执行完毕,必须在close后面
队列
Queue队列 也是在multiprocessing模块中调用
创建队列:
from multiprocessing import Queue
q=Queue(3)
后面这个3表示只能存放三个数据
put()方法:向队列存放数据,如果队列已满,此方法将阻塞至有空间可用位置
get()方法:调出q中的首个数据,如果队列为空,此方法将阻塞至队列中有项目可用为止
full()方法:判断队列中是否需满 如果满了 返回True 否则返回False
empty()方法 :判断队列中是否为空 如果是空则返回True 否则返回False
后面的数据如果想进入的话 必须有数据出去 遵循先进先出原则
进程池与队列的区别
进程池不遵循先进先出原则 进出顺序不确定
队列遵循先进先出原则 先进去的先出去 进出顺序确定