Python进程池基本概念
作者:苏州程序大白 发布时间:2021-08-06 01:39:28
前言:
创建进程池可以形象地理解为创建一个并行的流水线,只需创建一次流水线的消耗,处理接收到的任务的,不使用进程池。 ,浪费时间。
中方本来没有进程的,除了python
的,使用线程池的语言,是进程的其他线程池(而进程是执行业务的其他任务)。python的原因(因为Cython的概念),线程编程不同的并行,把线程池的概念转移到了进程中,命名为进程池。
一、python进程池
创建的子进程数量不多时,可以直接利用多处理进程中的进程动态形成需要的进程。
如果是上百量甚至巨大上千,手动的去创建进程的工作目标,此时就可以为多进程模块提供池的方法。
1、初始化 Pool
时,可以指定一个进程数
2、当有新的请求提交到 Pool 中时
如果池还没有满,那么就用创建一个新进程的执行该请求;
如果池中的进程达到指定的任务,那么已经有多少时间,直到有进程结束,会用之前的请求进程来执行新的任务。
二、进程池如何使用?
申请()
函数原型:apply (func, args=()[, kwds={}]])
该函数传递不定参数,同 python 中的应用函数一致,主进程会被阻止函数执行结束(不建议使用,并且 3.x 以后不再出现使用)
apply_async
函数原型:apply_async(func[, args=()[, kwds={}[, callback=None]]])
与应用一致,但它是非进行不支持的使用支持结果返回后反对
地图()
函数原型:map(func, iterable[, chunksize=None])
池类中的映射表的行为必须基本一致,它会使用第二个进程与先前的结果返回:
但在实际使用中,参数是一个调用,在整个应用程序中都需要注意,程序会运行子进程。
map_async()
函数原型:map_async(func, iterable[, chunksize[, callback]])
与地图匹配一致,但它是非阻尼的。
close()
关闭进程池(pool
),不再接受新的任务。
终端()
结束工作进程,不再处理未处理的任务。
加入()
主进程停止等待子进程的退出,加入方法要在关闭或终止使用之后。
三、代码实列
# 导入相关multiprocessing包
import multiprocessing
# 创建拥有CPU核心数量的进程的进程池
pool = multiprocessing.Pool(processes=multiprocessing.cpu_count())
for i in range ( 100 ): ##制动等待当前任务的进程结束# pool.apply(func=pow, args=(i,2))
# 不延迟当前任务的进程结束
pool.apply_async(func= pow , args=(i, 2 ))
# # map函数到一个列表,延迟返回值
# results = pool.map(func=print, iterable=[i for i in range(10000)])
# # 不延迟等待返回值,未运行完就调用results会报错。
# results = poolmap_async(func=print, iterable=[i for i in range(10000)])
#close之后不会有新的进程加入到pool
pool.close()
#加入函数等待所有子进程#调用加入之前,先结束调用close函数,否则会出错。
pool.join()
# # 结束工作进程,不再处理未完成的任务。
# pool.terminate()
四、进程池中的进程和一般的进程有什么区别?
进程池中的Queue:
如果要使用进程池创建进程,就需要使用
multiprocessing.Manager()
中的Queue()
,而不是multiprocessing.Queue()
。使用的方法是一样的,都已经成功了,再用q.put()添加、q.get()等待获取。
来源:https://blog.csdn.net/weixin_46931877/article/details/123849788


猜你喜欢
- 前言需求: 必须现在需要动态创建16个list,每个list的名字不一样,但是是有规律可循,比如第一个list的名字叫:arriage_li
- 如果要用某个开源框架,需要安装多个依赖包可以如下操作:如依赖文件形式如下(可以不要版本号):txt文件名为requirements.txt,
- 本文介绍了PyTorch上搭建简单神经网络实现回归和分类的示例,分享给大家,具体如下:一、PyTorch入门1. 安装方法登录PyTorch
- 第一次用layui,正在摸索中,今天在学习layui的时候在项目中看到一个表单提交,表单的数据传到后台是怎么自动封装到实体类里面的呢?1、表
- Vue 能监听数组的情况Vue 监听数组和对象的变化(vue2.x)vue 实际上可以监听数组变化,比如:直接 = 赋值data () {
- antd form表单使用setFildesValue 赋值失效加上this.$nextTick(()=>{})即可this.$nex
- vue第四课:v-show,v-if,v-bind的使用1,v-show指令根据表达式的真假,切换元素的显示和隐藏如:广告,遮罩层等<
- 本文实例讲述了Python网络编程使用select实现socket全双工异步通信功能。分享给大家供大家参考,具体如下:在前面一篇《Pytho
- 前言:时间戳的定义Unix时间戳(Unix时间戳)或称Unix时间(Unix时间),POSIX时间(POSIX时间),是一种时间表示方式,定
- torch.flatten(x)等于torch.flatten(x,0)默认将张量拉成一维的向量,也就是说从第一维开始平坦化,t
- 本章的前面讨论如何使用SQL向一个表中插入数据。但是,如果你需要向一个表中添加许多条记录,使用SQL语句输入数据是很不方便的。幸运的是,My
- 使用了Python的 xml.etree.ElementTree 库xml.etree.ElementTree 库简介xml.etree.E
- 兄弟ifream的方法调用兄弟ifream Avar ifreamId = window.frameElement && w
- Python 是一种流行的编程语言,也是数据科学社区中最受欢迎的语言。与其他流行编程语言相比,Python 的主要缺点是它的动态特性和多功能
- 在select语句中可以使用groupby子句将行划分成较小的组,然后,使用聚组函数返回每一个组的汇总信息,另外,可以使用having子句限
- 一、简介Paramiko模块是基于Python实现的SSH远程安全连接,用于SSH远程执行命令、文件传输等功能。安装模块默认Python没有
- 概述今天我们要来做一个进阶的花分类问题. 不同于之前做过的鸢尾花, 这次我们会分析 102 中不同的花. 是不是很上头呀.预处理导包常规操作
- MySQL设置当前时间为默认值的问题我们经常会遇到,下面就为您介绍MySQL设置当前时间为默认值的实现全步骤,希望对您能有所启迪。数据库:t
- 废话不多说了,直接给大家贴代码了,具体代码如下所示:-- 开窗函数:在结果集的基础上进一步处理(聚合操作)-- Over函数,添加一个字段显
- videojs虽然已经为我们提供了较为完善的功能.但是在实际应用中,我们仍然可能需要为这个播放器添加部分功能.下面将以添加标题栏为示例简要介