多进程(python语言实现,详细讲解)

并发是任务数多于cpu核数,这样看起来是一起执行,其实切换比较快而已
并行就是任务数小于cpu核数,一起执行

单核其实就是类似于并发,一个一个切换的比较快,多核可以看成多个单核,类似操作。

调度算法:什么样的情况下让谁先执行,就是调度算法

进程:正在运行的代码
程序:编写完毕的代码,没有运行
进程的三个状态:就绪,运行,阻塞
———————————————————————————————————————————————

ret=os.fork() #创建一个子进程
主进程中ret>0,子进程中ret=0,有了os.fork就创造了一个子进程,下面的都执行。

当主进程退出就退出,不会因为子进程没结束就等他。只是因为加了一个os.fork(),主进程打印over了,子进程还是执行over在这里插入图片描述

全局变量在一个进程中数据修改不能个改变另一个进程的数据
在这里插入图片描述
多次fork,如果是并列的就是2的n次方在这里插入图片描述
和fork不一样的地方就是,fork,windows里面没有,所以要想创建一个进程就用from multiprocessing import Process在这里插入图片描述
这时候把下面的while True删除了,主进程就会等待子进程结束在结束,而fork不会,两个没有影响

join会一直等到这个进程结束才会进行下一个进程,这个不结束就一直等在这里插入图片描述

常用的Process方法在这里插入图片描述

子类创建进程,用类来编写,继承Process类,可以有__init__,外部的start一定会调用run方法,所以是重写run方法在这里插入图片描述
进程池,非堵塞方式,堵塞就把apply_async变成apply就是一个进程结束在执行另一个进程
apply是阻塞的,所以进入子进程执行后,等待当前子进程执行完毕,在继续执行下一个进程。
apply_async是非阻塞的,根据系统吊调度。在这里插入图片描述
———————————————————————————————————————————————
进程间的通信
from multiprocessing import Process,Queue
q=queue()
q.put(0)
q.get()就是取出来并且读出来
q.qsize()判断里面有几个参数
q.full()判断队列满了没
q.empty()判断队列是不是空了

这个只能用作Process,如果要用到进程池的话需要from multiprocessing import Manager,Pool

初始化时候要p=Manager().Queue()在这里插入图片描述

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值