多任务—进程

1. 进程

  • 程序:例如xxx.py这是程序,是一个静态的
  • 进程:一个程序运行起来后,代码+用到的资源 称之为进程,它是操作系统分配资源的基本单元。不仅可以通过线程完成多任务,进程也是可以的

2. 进程的状态

工作中,任务数往往大于cpu的核数,即一定有一些任务正在执行,而另外一些任务在等待cpu进行执行,因此导致了有了不同的状态
在这里插入图片描述

  • 就绪态:运行的条件都已经慢去,正在等在cpu执行
  • 执行态:cpu正在执行其功能
  • 等待态:等待某些条件满足,例如一个程序sleep了,此时就处于等待态

3.进程的创建步骤

导入进程模块

import multiprocessing

创建一个进程的实力对象

p = Multiprocessing.Process(target=func_name[,args=(元组), kwargs={字典}])

创建并启动进程

p.start()
p.join(5)

4.通过Queue实现进程间通信

创建一个队列

q = multiprocessing.Queue(3)  
# 3代表队列中最多可以接收三条消息

向队列中添加数据

q.put(data)

从队列中取数据

q.get()

判断队列中是否为空

q.empty()

判断队列中是否已满

q.full()

如果是通过进程池创建的进程,那么队列的使用要用

multiprocessing.Manager().Queue()的方式,否则会报错。

5.进程池Pool

当需要创建的子进程数量不多时,可以直接利用multiprocessing中的Process动态成生多个进程,但如果是上百甚至上千个目标,手动的去创建进程的工作量巨大,此时就可以用到multiprocessing模块提供的Pool方法。
初始化Pool时,可以指定一个最大进程数,当有新的请求提交到Pool中时,如果池还没有满,那么就会创建一个新的进程用来执行该请求;但如果池中的进程数已经达到指定的最大值,那么该请求就会等待,直到池中有进程结束,才会用之前的进程来执行新的任务

进程池的实现步骤

导入进程池模块

from multiprocessing import Pool

定义进程池,最大进程池最大数

po = Pool(3)

通过进程池调用目标 apply_async非阻塞,不会等待子进程结束;apply阻塞,会等待子进程结束才结束

po.apply_async(要调用的目标,(传递给目标的参数元祖,))

关闭进程池

po.close()

等待进程池执行完毕

po.join()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值