Python进程池Pool、进程池通信
前言
这几年一直在it行业里摸爬滚打,一路走来,不少总结了一些python行业里的高频面试,看到大部分初入行的新鲜血液,还在为各样的面试题答案或收录有各种困难问题
于是乎,我自己开发了一款面试宝典,希望能帮到大家,也希望有更多的Python新人真正加入从事到这个行业里,让python火不只是停留在广告上。
微信小程序搜索:Python面试宝典
或可关注原创个人博客:https://lienze.tech
也可关注微信公众号,不定时发送各类有趣猎奇的技术文章:Python编程学习
进程池
当我们使用传统的Process
来创建进程时,小规模进程量还OK
,但是一旦需要成百上千的进程,可以通过构建进程池解决;池的真正的并发数量由CPU
核数决定
在任务开启时,每个任务会到进程池中获取对应进程资源
如果没有可用进程,那么任务会被挂起等待,直到有新的进程资源去接管处理他
from multiprocessing import Pool
p = Pool(3,maxtasksperchild)
'''
maxtasksperchild: 指明一个进程同时可以执行的最大工作数
'''
# 创建一定个数的进程池
p.apply(func, args)
# 阻塞方式,调用函数及传入参数,下个进程阻塞直到上个进程结束
p.apply_async(func, args)
# 非阻塞方式,调用函数及传入参数,并发完成任务
p.close()
# 关闭进程池不在接收新的任务进入
p.join()
# 父进程等待全部子进程结束,必须在close函数之后
p.terminat()
# 直接关闭进程池并终止所有进程任务
- 获取进程池返回值
res = p.apply() # 阻塞多进程执行函数返回值 即为任务函数的返回值
res = p.apply_async() # 非阻塞多进程执行函数返回值是一个结果对象
'''- res.get() 即可获得任务函数的返回值
'''
res = p.map(func, range(10)) # 进程池中的map函数类似普通map函数,将一个序列中的每个值作为参数传递到任务函数中,返回值也将是一个序列对象,用来保存每个进程任务返回的结果,该函数为阻塞直到结果出现
res = p.map_async() # 执行之后,为一个抽象任务队列,只有真正使用 res.get()获取值时,任务进程才会执行,并且为非阻塞方式运行
- 进程池代码示例
from multiprocessing import Pool,current_process
import time
import sys
def work(num):time.sleep(0.5)print('当前进程是:',current_process().name,':',num)return numdef main():p = Pool(3)print("开启进程")res = []for var in range(10):res.append(p.apply(func=work,args=(var,)))# res.append(p.apply_async(func=work,args=(var,)))p.close() #关闭进程池p.join()print(res) # apply # for var in res: # apply_async# print(var.get(),end=' ')print('\nover')if __name__ == '__main__':main()
进程池加锁
本身的多进程apply
函数已经是阻塞模式,所以加锁意义不大
当遇到apply_async
函数时,由于此时为真正的异步,我们可能需要在进程池内进行锁操作
- 可以使用如下进行同步管理
from multiprocessing import Manager
lock = Manager().Lock()
semphore = Manager().Semaphore()
进程池加锁
本身的多进程apply
函数已经是阻塞模式,所以加锁意义不大
当遇到apply_async
函数时,由于此时为真正的异步,我们可能需要在进程池内进行锁操作
- 可以使用如下进行同步管理
from multiprocessing import Manager
lock = Manager().Lock()
semphore = Manager().Semaphore()
Python进程池Pool、进程池通信相关推荐
- Python 多进程笔记 — 启动进程的方式、守护进程、进程间通信、进程池、进程池之间通信、多进程生产消费模型
1 面向过程启动多进程 Python 操作进程的类都定义在 multiprocessing 模块,该模块提供了一个 Process 类来代表一个进程对象,这个对象可以理解为是一个独立的进程,可以执行另 ...
- python全栈开发,Day40(进程间通信(队列和管道),进程间的数据共享Manager,进程池Pool)...
昨日内容回顾 进程 multiprocess Process -- 进程 在python中创建一个进程的模块startdaemon 守护进程join 等待子进程执行结束锁 Lock acquire r ...
- python队列线程池_实例详解:python高级编程之消息队列(Queue)与进程池(Pool)
今天为大家带来的内容是:python高级编程之消息队列(Queue)与进程池(Pool),结合了实例的形式详细分析了Python消息队列与进程池的相关原理.使用技巧与操作注意事项!!! Queue消息 ...
- python进程池调用实例方法_Python进程池Pool应用实例分析
本文实例讲述了Python进程池Pool应用.分享给大家供大家参考,具体如下: 当需要创建的子进程数量不多时,可以直接利用multiprocessing中的Process动态成生多个进程,但如果是上百 ...
- python 使用进程池Pool进行并发编程
进程池Pool 当需要创建的子进程数量不多时,可以直接利用multiprocessing中的Process动态成生多个进程,但如果是上百甚至上千个目标,手动的去创建进程的工作量巨大,此时就可以用到mu ...
- python进程池pool_python多任务--进程池Pool
进程池Pool 在利用Python进行系统管理的时候,特别是同时操作多个文件目录,或者远程控制多台主机,并行操作可以节约大量的时间.当被操作对象数目不大时,可以直接利用multiprocessing中 ...
- python并行计算进程池通信_Python使用进程池管理进程和进程间通信
与线程池类似的是,如果程序需要启动多个进程,也可以使用进程池来管理进程.程序可以通过 multiprocessing 模块的 Pool() 函数创建进程池,进程池实际上是 multiprocessin ...
- python 进程池pool使用详解
和选用线程池来关系多线程类似,当程序中设置到多进程编程时,Python 提供了更好的管理多个进程的方式,就是使用进程池. 在利用 Python 进行系统管理的时候,特别是同时操作多个文件目录,或者远程 ...
- python 进程池 freeze_support_Python 多进程并发操作中进程池Pool的实例
在利用Python进行系统管理的时候,特别是同时操作多个文件目录,或者远程控制多台主机,并行操作可以节约大量的时间.当被操作对象数目不大时,可以直接利用multiprocessing中的Process ...
最新文章
- Ubuntu下Sublime Text 3解决无法输入中文的方法
- 使用测微计收集应用程序指标
- android的底部弹出框炫酷的样式,Android自定义底部弹出框ButtomDialog
- Python之旅:集合
- Python图像的基本操作
- 别人问了个问题:有没有选择JAVA开发的设计文档
- java复制类mytool,JAVA Beans复制Utils比较
- YYKit源码学习——YYMemoryCache
- 无人机怎么设定航线_飞行航线设置方法及装置与流程
- 大数据开源框架环境配置(一)——安装VMware
- 兆比特每秒和兆字节每秒_bit ( 比特 )和 Byte(字节)的关系 以及 网速怎么算
- Spring Boot(二):整合 JPA 及 事务控制
- html5 meta keywords,HTML中meta标签及Keywords介绍
- 计划招收300人,复旦大学计算机学院2022年夏令营来袭
- 【ODX介绍】-4.3-UDS诊断$3E服务在ODX-D诊断描述文件中如何描述
- 【软件网每日新闻播报│第9-27期】
- 知识点:matplotlib绘图的线条设置以及颜色设置
- 方阵的特征值和特征向量的求解案例(二阶方阵)
- 嵌入式开发板如何自动登陆校园网实现上网
- python实现屏幕视频录制_用Python来做一个屏幕录制工具