Python 进程池 multiprocessing.Pool - Python零基础入门教程
目录
- 一.Python 进程池 multiprocessing.Pool 介绍
- 二.Python 进程池 multiprocessing.Pool 使用
- 三.猜你喜欢
零基础 Python 学习路线推荐 : Python 学习目录 >> Python 基础入门
Python 进程池 Pool 和前面讲解的** Python 线程池** 类似,虽然使用多进程能提高效率,但是进程的创建会消耗大量的计算机资源(进程 Process 的创建远远大于线程 Thread 创建占用的资源),线程是计算机最小的运行单位**,连线程都需要使用线程池,进程有什么理由不使用进程池?
需要注意的是,在 Windows 上要想使用进程模块,就必须把有关进程的代码写在if __name__ == ‘__main__’ 内,否则在 Windows 下使用进程模块会产生异常。 Unix / Linux 下则不需要。
一.Python 进程池 multiprocessing.Pool 介绍
Pool 类可以提供指定数量的进程供用户调用,当有新的请求提交到 Pool 中时,如果池还没有满,就会创建一个新的进程来执行请求。如果池满,请求就会告知先等待,直到池中有进程结束,才会创建新的进程来执行这些请求。
# 导入进程模块import multiprocessing# 最多允许3个进程同时运行pool = multiprocessing.Pool(processes = 3)
1、apply — 该函数用于传递不定参数,主进程会被阻塞直到函数执行结束(不建议使用,并且 3.x 以后不在出现),函数原型如下:
apply(func, args=(), kwds={})
**2、apply_async **— 与 apply 用法一致,但它是非阻塞的且支持结果返回后进行回调,函数原型如下:
apply_async(func[, args=()[, kwds={}[, callback=None]]])
3、map — Pool 类中的 map 方法,与内置的 map 函数用法基本一致,它会使进程阻塞直到结果返回,函数原型如下:
map(func, iterable, chunksize=None)
注意:虽然第二个参数是一个迭代器,但在实际使用中,必须在整个队列都就绪后,程序才会运行子进程。
**4、map_async **— 与 map 用法一致,但是它是非阻塞的。其有关事项见 apply_async,函数原型如下:
map_async(func, iterable, chunksize, callback)
5、close — 关闭进程池(pool),使其不在接受新的任务。
6、terminal — 结束工作进程,不在处理未处理的任务。
7、join — 主进程阻塞等待子进程的退出, join 方法要在 close 或 terminate 之后使用。
二.Python 进程池 multiprocessing.Pool 使用
# !usr/bin/env python
# -*- coding:utf-8 _*-
"""
@Author:猿说编程
@Blog(个人博客地址): www.codersrc.com
@File:Python 进程池 multiprocessing.Pool.py
@Time:2021/05/09 07:37
@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!"""import multiprocessing
import timedef func(msg):print("in:", msg)time.sleep(3)print("out,", msg)if __name__ == "__main__":# 这里设置允许同时运行的的进程数量要考虑机器cpu的数量,进程的数量最好别小于cpu的数量,# 因为即使大于cpu的数量,增加了任务调度的时间,效率反而不能有效提高pool = multiprocessing.Pool(processes = 3)item_list = ['processes1' ,'processes2' ,'processes3' ,'processes4' ,'processes5' ,]count = len(item_list)for item in item_list:msg = "python教程 %s" %item# 维持执行的进程总数为processes,当一个进程执行完毕后会添加新的进程进去pool.apply_async(func, (msg,))pool.close()pool.join() # 调用join之前,先调用close函数,否则会出错。执行完close后不会有新的进程加入到pool,join函数等待所有子进程结束'''
输出结果:in: python教程 processes1
in: python教程 processes2
in: python教程 processes3
out, python教程 processes1
in: python教程 processes4
out, python教程 processes2
in: python教程 processes5
out, python教程 processes3
out, python教程 processes4
out, python教程 processes5
'''
代码分析:
5 个任务,3 个进程,由于在进程池构造的时候允许同时最多执行 3 个进程,所以同时执行任务 1 / 任务 2 / 任务 3,重代码的输出结果来看,任务 1 / 任务 2 / 任务 3 执行后,for 循环进入阻塞状态,直到任务 1 / 任务 2 / 任务 3 其中一个结束之后才会 for 才会继续执行任务 4 / 任务 5,并保证同时执行的最多只有 3 个任务( 进程池 multiprocessing.Pool 和 线程池 ThreadPoolExecutor 原理相同).
三.猜你喜欢
- Python 条件推导式
- Python 列表推导式
- Python 字典推导式
- Python 不定长参数 *argc/**kargcs
- Python 匿名函数 lambda
- Python return 逻辑判断表达式
- Python is 和 == 区别
- Python 可变数据类型和不可变数据类型
- Python 浅拷贝和深拷贝
- Python 异常处理
- Python 线程创建和传参
- Python 线程互斥锁 Lock
- Python 线程时间 Event
- Python 线程条件变量 Condition
- Python 线程定时器 Timer
- Python 线程信号量 Semaphore
- Python 线程障碍对象 Barrier
- Python 线程队列 Queue – FIFO
- Python 线程队列 LifoQueue – LIFO
- Python 线程优先队列 PriorityQueue
- Python 线程池 ThreadPoolExecutor(一)
- Python 线程池 ThreadPoolExecutor(二)
- Python 进程 Process 模块
- Python 进程 Process 与线程 threading 区别
- Python 进程间通信 Queue / Pipe
未经允许不得转载:猿说编程 » Python 进程池 multiprocessing.Pool
[喜欢(1)](javascript:
Python 进程池 multiprocessing.Pool - Python零基础入门教程相关推荐
- Python进程池multiprocessing.Pool的用法
一.multiprocessing模块 multiprocessing模块提供了一个Process类来代表一个进程对象,multiprocessing模块像线程一样管理进程,这个是multiproce ...
- python进程池multiprocessing.Pool和线程池multiprocessing.dummy.Pool实例
本文简单介绍python进程模块multiprocessing提供的进程池和线程池功能. 进程池: 进程池的使用有四种方式:apply_async.apply.map_async.map.其中appl ...
- python进程池multiprocessing.Pool运行错误:The freeze_support() line can be omitted if the program is not g
测试代码如下: 原文:https://blog.csdn.net/xiemanr/article/details/71700531 # -*- coding: utf-8 -*- import mul ...
- 【Python】Python进程池multiprocessing.Pool八个函数对比:apply、apply_async、map、map_async、imap、starmap...
1.apply 和 apply_async 一次执行一个任务,但 apply_async 可以异步执行,因而也可以实现并发. 2.map 和 map_async 与 apply 和 apply_asy ...
- python进程池win出错,python进程池multiprocessing.Pool运行错误:
错误: Traceback (most recent call last): File "", line 1, in File "C:\Program Files\Ana ...
- Python globals 函数 - Python零基础入门教程
目录 一.Python globals 函数语法 二.Python globals 函数使用 三.猜你喜欢 零基础 Python 学习路线推荐 : Python 学习目录 >> Pytho ...
- Python locals 函数 - Python零基础入门教程
目录 一.locals 函数语法 二.locals 函数使用 三.猜你喜欢 零基础 Python 学习路线推荐 : Python 学习目录 >> Python 基础入门 一.locals ...
- Python reduce 函数 - Python零基础入门教程
目录 一.Python reduce 函数简介 1.reduce 函数语法 2.reduce 函数原理 二.Python reduce 函数使用 1.reduce 函数普通使用 2.reduce 函数 ...
- Python chr 函数 - Python零基础入门教程
目录 一.Python chr 函数简介 二.Python chr 函数使用 三.猜你喜欢 零基础 Python 学习路线推荐 : Python 学习目录 >> Python 基础入门 一 ...
最新文章
- 基于visual Studio2013解决面试题之0209最大堆排序
- jvm性能调优 - 21案例实战_百万级用户的在线系统如何基于G1垃圾回收器优化性能
- php 支付宝订单查询_5. PHP接入支付宝单笔订单查询接口
- 免费的400GB网络存储空间
- linux查找文件限制时间,Linux查找命令find与文件三种时间
- 开发asp.net2.0手机用网站 点滴[xgluxv]
- IntelliJ IDEA for Mac 项目窗口详解(Project Windows)
- 页面性能优化参考建议
- 阿里P8架构师谈:数据库、JVM、缓存、SQL等性能调优方法和原则
- HDU 5781 ATM Mechine(概率dp)
- Linux就该这么学-第三课
- 难道这个会是我的广角选择?
- 数据库 ER图 EER图(鸭蹼图) freedgo绘图工具
- NAT端口映射到物理机
- 安装Ubuntu后找不到windows启动项的解决办法
- SpringBoot + screw 一键生成数据库文档,告别CV大法,解放生产力
- als算法参数_ALS算法实现用户音乐打分预测
- ipod nano7安装linux,怎么用ipod nano看视频?
- 初识vue-baidu-map
- 记录一个在latex中使文章段落中每行两端对齐的方法
热门文章
- KubeVela 上手(1)|让云端应用交付更加丝滑
- 阿里云峰会|数据库也能自动驾驶?DAS全天候给你保驾护航!
- 景区门票系统上云 低成本、安全性高
- 打通前后端逻辑,客户端Flutter代码一天上线
- TailwindCSS v3.0 正式发布!一大波新特性来袭!
- 倒计时 3 天!1024 程序员节全日程曝光,105 场深度演讲点燃数字经济新时代
- 一行代码引来的安全漏洞,就让我们丢失了整个服务器的控制权
- 5亿整数的大文件,怎么排序 ?面试被问傻!
- 微服务精华问答 | 什么是金丝雀释放?
- Hadoop精华问答 | Hadoop 和Spark有什么区别?