python进程池apply与apply_async的区别
apply方法是阻塞的。
意思就是等待当前子进程执行完毕后,在执行下一个进程。
例如:执行结果如下:
因为apply是阻塞的,所以进入子进程执行后,等待当前子进程执行完毕,在继续执行下一个进程。
例如:
有三个进程0,1,2。等待子进程0执行完毕后,在执行子进程1,然后子进程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的区别相关推荐
- Python 进程池 multiprocessing.Pool - Python零基础入门教程
目录 一.Python 进程池 multiprocessing.Pool 介绍 二.Python 进程池 multiprocessing.Pool 使用 三.猜你喜欢 零基础 Python 学习路线推 ...
- python的用途实例-python进程池作用展示及实例解析
在以下的文章之中我们来了解一下什么是python中的进程池.了解一下python进程池的相关知识,以及进程池在python编程之中能起到什么样的作用. 进程池 Pool类描述了一个工作进程池,他有几种 ...
- python进程池和线程池_python自带的进程池及线程池
进程池 """ python自带的进程池 """ from multiprocessing import Pool from time im ...
- python 进程池 等待数量_python 进程池multiprocessing.Pool
44.Python 进程池multiprocessing.Pool 最后更新于:2020-03-21 11:53:37 python进程池Pool 和前面讲解的python线程池 类似,虽然使用多进程 ...
- Python进程池及自定义进程
Python进程池及自定义进程 微信关注公众号:夜寒信息 致力于为每一位用户免费提供更优质技术帮助与资源供给,感谢支持! 这次给大家分享Python的进程池及自定义进程,由于Python基础已 ...
- python进程池调用实例方法_Python进程池Pool应用实例分析
本文实例讲述了Python进程池Pool应用.分享给大家供大家参考,具体如下: 当需要创建的子进程数量不多时,可以直接利用multiprocessing中的Process动态成生多个进程,但如果是上百 ...
- python进程池的使用
python进程池 import os from multiprocessing import Pool import timea = 1 def task(name):global afor i i ...
- python 进程池使用
python进程池 # Pool(processes=None, initializer=None, initargs=(), maxtasksperchild=None)# 函数返回一个进程池(Po ...
- python进程池与线程池
文章目录 python进程池与线程池 思考 简介 进程池与线程池基本使用 concurrent.futures 介绍 基本方法 使用示例 python进程池与线程池 思考 能否无限制的开设进程或者线程 ...
- Python 进程池共享数据
Python 进程池共享数据 解决进程池间全局变量不关联问题 from concurrent.futures import ProcessPoolExecutor import multiproces ...
最新文章
- 基于单个xml的数据库
- 复习笔记(二)——C++面向对象设计和使用
- 操作XML 报错:根级别上的数据无效 和 给定编码中的字符无效 解决办法
- sas数据导入终极汇总-之二
- hadoop join之map side join
- 听说java又过气了?看我运用大数据分析2019年java发展趋势!
- python性能测试模块_技巧python模块性能测试-阿里云开发者社区
- FileUpload上传图片提示 “GDI+中发生一般性错误”
- Oracle中“行转列”的实现方式
- axure rp8学习回忆
- 【龙格库塔优化算法】基于龙格库塔优化算法求解单目标优化问题含Matlab源码
- HDC1080 驱动程序代码(C语言版)
- git分支代码提交主干
- ONVIF 获取RTSP URL过程
- gis里创建要素面板怎么打开_简单又高效 —— 用GIS快速完成控规编制
- 邮箱确认html,html5+JavaScript进行邮箱地址验证
- Markdowm编辑器推荐和Emoji 表情
- 微信小游戏开发能否突破4M限制
- 以太坊:快速入门 Truffle
- ios手游退款有风险吗?