1. apply方法是阻塞的。
    意思就是等待当前子进程执行完毕后,在执行下一个进程。
    例如:

    执行结果如下:

    因为apply是阻塞的,所以进入子进程执行后,等待当前子进程执行完毕,在继续执行下一个进程。
    例如:
    有三个进程0,1,2。等待子进程0执行完毕后,在执行子进程1,然后子进程2,最后回到主进程执行主进程剩余部分,就像上面的执行结果一样。
    相当于:

    这样好像跟单进程串行执行没什么区别了。

  2. apply_async 是异步非阻塞的。
    意思就是:不用等待当前进程执行完毕,随时根据系统调度来进行进程切换。
    例如:

    执行结果如下:

    完全没有等待子进程执行完毕,主进程就已经执行完毕,并退出程序。

为什么会这样呢?

因为进程的切换是操作系统来控制的,抢占式的切换模式。
我们首先运行的是主进程,cpu运行很快啊,这短短的几行代码,完全没有给操作系统进程切换的机会,主进程就运行完毕了,整个程序结束。子进程完全没有机会切换到程序就已经结束了。

apply是阻塞式的。

首先主进程开始运行,碰到子进程,操作系统切换到子进程,等待子进程运行结束后,在切换到另外一个子进程,直到所有子进程运行完毕。然后在切换到主进程,运行剩余的部分。

apply_async是异步非阻塞式的。

首先主进程开始运行,碰到子进程后,主进程说:让我先运行个够,等到操作系统进行进程切换的时候,在交给子进程运行。以为我们的程序太短,然而还没等到操作系统进行进程切换,主进程就运行完毕了。

想要子进程执行,就告诉主进程:你等着所有子进程执行完毕后,在运行剩余部分。

画红圈的地方及时我们要告诉主进程,你等着所有子进程运行完毕后在运行剩余部分。

注意:close必须在join前调用。

运行结果如下:

你看,因为apply_async是异步非阻塞式,不用等待当前进程执行完毕,随时跟进操作系统调度来进行进程切换。
进程0没有执行完,就切换到进程1开始执行,进程1没有执行完,就切换到进程2,然后在切换回去。等待所有子进程运行完毕后,最后切换回主进程,执行剩余部分。

异步非阻塞式:

总耗时:3秒多。我们每个子进程休眠3秒,正因为是异步非阻塞式的,不用等待当前运行的子进程执行完毕,随时根据系统调度来进行进程切换。基本上主进程和三个子进程,四个进程是同时运行的。

阻塞式:

总耗时:9秒多。以为是阻塞式,需要等待当前子进程执行完毕后,在执行下一个子进程。每个子进程休眠3秒,三个子进程休眠9秒。基本上主进程加上子进程,四个进程就相当于在单进程中串行执行的。

python官方建议:废弃apply,使用apply_async。

python进程池apply与apply_async的区别相关推荐

  1. Python 进程池 multiprocessing.Pool - Python零基础入门教程

    目录 一.Python 进程池 multiprocessing.Pool 介绍 二.Python 进程池 multiprocessing.Pool 使用 三.猜你喜欢 零基础 Python 学习路线推 ...

  2. python的用途实例-python进程池作用展示及实例解析

    在以下的文章之中我们来了解一下什么是python中的进程池.了解一下python进程池的相关知识,以及进程池在python编程之中能起到什么样的作用. 进程池 Pool类描述了一个工作进程池,他有几种 ...

  3. python进程池和线程池_python自带的进程池及线程池

    进程池 """ python自带的进程池 """ from multiprocessing import Pool from time im ...

  4. python 进程池 等待数量_python 进程池multiprocessing.Pool

    44.Python 进程池multiprocessing.Pool 最后更新于:2020-03-21 11:53:37 python进程池Pool 和前面讲解的python线程池 类似,虽然使用多进程 ...

  5. Python进程池及自定义进程

    Python进程池及自定义进程 微信关注公众号:夜寒信息 致力于为每一位用户免费提供更优质技术帮助与资源供给,感谢支持!     这次给大家分享Python的进程池及自定义进程,由于Python基础已 ...

  6. python进程池调用实例方法_Python进程池Pool应用实例分析

    本文实例讲述了Python进程池Pool应用.分享给大家供大家参考,具体如下: 当需要创建的子进程数量不多时,可以直接利用multiprocessing中的Process动态成生多个进程,但如果是上百 ...

  7. python进程池的使用

    python进程池 import os from multiprocessing import Pool import timea = 1 def task(name):global afor i i ...

  8. python 进程池使用

    python进程池 # Pool(processes=None, initializer=None, initargs=(), maxtasksperchild=None)# 函数返回一个进程池(Po ...

  9. python进程池与线程池

    文章目录 python进程池与线程池 思考 简介 进程池与线程池基本使用 concurrent.futures 介绍 基本方法 使用示例 python进程池与线程池 思考 能否无限制的开设进程或者线程 ...

  10. Python 进程池共享数据

    Python 进程池共享数据 解决进程池间全局变量不关联问题 from concurrent.futures import ProcessPoolExecutor import multiproces ...

最新文章

  1. 基于单个xml的数据库
  2. 复习笔记(二)——C++面向对象设计和使用
  3. 操作XML 报错:根级别上的数据无效 和 给定编码中的字符无效 解决办法
  4. sas数据导入终极汇总-之二
  5. hadoop join之map side join
  6. 听说java又过气了?看我运用大数据分析2019年java发展趋势!
  7. python性能测试模块_技巧python模块性能测试-阿里云开发者社区
  8. FileUpload上传图片提示 “GDI+中发生一般性错误”
  9. Oracle中“行转列”的实现方式
  10. axure rp8学习回忆
  11. 【龙格库塔优化算法】基于龙格库塔优化算法求解单目标优化问题含Matlab源码
  12. HDC1080 驱动程序代码(C语言版)
  13. git分支代码提交主干
  14. ONVIF 获取RTSP URL过程
  15. gis里创建要素面板怎么打开_简单又高效 —— 用GIS快速完成控规编制
  16. 邮箱确认html,html5+JavaScript进行邮箱地址验证
  17. Markdowm编辑器推荐和Emoji 表情
  18. 微信小游戏开发能否突破4M限制
  19. 以太坊:快速入门 Truffle
  20. ios手游退款有风险吗?

热门文章

  1. 【福利贴】教你如何移动联通电信免流
  2. 正则表达式验证邮箱手机号
  3. PS如何把文字的上下间距/行距如调大调小?
  4. docker 删除悬空镜像
  5. Mac中微信文件的存储路径
  6. word操作技巧总结--图片无法显示复制、空格、字体无法修改等
  7. 晨会纪要081110
  8. ue 清理缓存_浏览器缓存数据清理
  9. 拼团团长模式小程序源码, 团长开团,团员参与!
  10. java 自动生成密码_java 自动生成密码