python多进程multiprocessing使用,看这篇就够了(二)

1.上篇都是直接创建Process对象来创建子进程,其实还可以通过继承来创建子进程。

来看看Process源码,可以通过承继Process,重写run方法来启动子进程。因为对一个不包括target属性(即当target=None时)的Process类执行start()方法,就会运行类中的run()方法。

2.使用进程池Pool创建进程

Pool进程池,可以把进程池比做一个水池,假设我们要完成放满10个水盆水的任务,在这个水池中,最多可以放三个水盆,也就是最多能用三个水盆接水。

Pool有2种启动方式,

1. apply_async()  非阻塞方式(并行,异步),见下,下面代码创建了一个3个进程的进程池,在执行10个任务时,每次都是同时三个进程启动执行三个任务。回到放水任务,相当于有三个水笼头,三个水盆同时接水,每个水盆接满了就将水倒进桶里再重新接水。一直接满10个水盆的水。这三个水盆是同时接水的,并行,异步,互不干涉。

 

 2. apply(),阻塞式,进程池里的进程按顺序执行,必须一个进程执行完了才能继续下一个进程。回到放水任务,相当于有三个水盆,但是只有一个水笼头能用,三个水盆按顺序排好,一个接满了才能放另一个进去,轮流接水,一般不用这个方法来启动,失去了多进程的作用。

 close(), 关闭Pool, 不再接受新的任务。即整个池子不再使用,已运行的进程会继续运行完。

terminate(), 不管任务是否完成,彻底终止任务,相当直接杀死进程,不管是运行的还是没运行的,所有进程all die!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值