首页 > 系统相关 >python 进程池multiprocessing.Pool

python 进程池multiprocessing.Pool

时间:2023-05-21 13:13:39浏览次数:54  
标签:__ 教程 python 进程 multiprocessing Pool

转载:python 进程池multiprocessing.Pool(44) - 知乎 (zhihu.com)

python进程池Pool 和前面讲解的python线程池类似,虽然使用多进程能提高效率,但是进程的创建会消耗大量的计算机资源(进程Process的创建远远大于线程Thread创建占用的资源),线程是计算机最小的运行单位,连线程都需要使用线程池,进程有什么理由不使用进程池?

需要注意的是,在Windows上要想使用进程模块,就必须把有关进程的代码写在if __name__ == ‘__main__’ 内,否则在Windows下使用进程模块会产生异常。Unix/Linux下则不需要。

一.进程池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之后使用。

 

二.进程池Pool使用

# !usr/bin/env python
# -*- coding:utf-8 _*-
"""
@Author:何以解忧
@Blog(个人博客地址): https://www.codersrc.com
@Github:www.github.com
 
@File:python_process_Pool.py
@Time:2020/1/1 21:25
 
@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
"""
import multiprocessing
import time
 
 
def 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 原理相同).

 

猜你喜欢:

1.python 线程池ThreadPoolExecutor

2.python 进程Process

3.python 进程Process和线程threading区别

4.python 进程间通信Queue/Pipe

5.python 进程互斥锁Lock

 

 

标签:__,教程,python,进程,multiprocessing,Pool
From: https://www.cnblogs.com/zhiminyu/p/17418480.html

相关文章

  • python基础-进程池、submit同异步调用、shutdown参数、ProcessPoolExecutor进程池、进
    转载:(14条消息)python基础-进程池、submit同异步调用、shutdown参数、ProcessPoolExecutor进程池、进程池ftp_pythonsubmit_易辰_的博客-CSDN博客引入进程池在学习线程池之前,我们先看一个例子frommultiprocessingimportProcessimporttimedeftask(name):print(......
  • Python3.8多进程之共享内存
    转载:Python3.8多进程之共享内存-知乎(zhihu.com)最近发了个宏愿想写一个做企业金融研究的Python框架。拖出Python一看已经更新到了3.8,于是就发现了Python3.8里新出现的模块:multiprocessing.shared_memory。随手写了个测试。生成一个240MB大小的pandas.DataFrame,然后转换成nu......
  • python进程池ProcessPoolExecutor的用法与实现分析
    转载:(14条消息)【Python随笔】python进程池ProcessPoolExecutor的用法与实现分析_utmhikari的博客-CSDN博客concurrent.futures—Launchingparalleltasks—Python3.11.3documentation在python开发期间,由于GIL的原因,不能直接采用并行的方式处理代码逻辑。在multiprocess......
  • 使用Python进行nc数据转tiff(多图层)
    最近帮人处理了一批数据,发现matlab处理nc并不是很友好,遂查询了Python方法。参考文献:lhttp://www.dtmao.cc/news_show_498450.shtml#-*-coding:utf-8-*-#模块导入importnumpyasnpimportnetCDF4asncfromosgeoimportgdal,osr,ogrimportosimportglob#单个n......
  • Python高级编程技巧:函数式编程和闭包
    Python是一种非常流行的编程语言,可以用于各种应用领域,如Web开发,人工智能,数据科学等。其中,函数式编程和闭包是Python编程中非常重要的概念,本文将深入探讨这两个主题。函数式编程Python是一种多范式语言,既支持面向对象编程,也支持函数式编程。函数式编程的一大特点是强调函数的纯洁性......
  • Python的33个保留字有哪些?关键字大全
    Python的33个保留字包括False、None、True、and、as、assert等,Python的标准库提供了一个keyword模块,可以输出当前Python版本的所有关键字列表,腾讯云服务器网来详细说下Python的33个保留字及保留字查询方法:Python的33个保留字Python的保留字或关键字是指我们不能把它们用作任何标识......
  • Python计算目标检测中的IoU
    Python计算目标检测中的IoU前言前提条件相关介绍实验环境IoU概念代码实现前言本文是个人使用PythonPython处理文件的电子笔记,由于水平有限,难免出现错漏,敬请批评改正。更多精彩内容,可点击进入我的个人主页查看前提条件熟悉Python相关介绍Python是一种跨平台的计算机程序设计语言。......
  • Python操作常用数据库
    Python操作常用数据库前言简介SQLite连接SQLite创建数据表增删改查MySQLmysql-connector操作MySQL创建数据表增删改查pymysql操作MySQLMongoDB连接MongoDB增删改查Redis连接Redis前言本文是个人使用Python操作常用数据库的学习笔记,由于水平有限,难免出现错漏,敬请批评改正。简介数据......
  • 你真的了解Python吗?Python一些常见问题总结(一)
    你真的了解Python吗?Python一些常见问题总结(一)前言Python40问参考链接前言本文整理和解答了关于python的一些常见问题,由于水平有限,难免出现错漏,敬请批评改正。Python40问什么是Python?Python-百度百科Python官网Python3菜鸟教程Python是一种解释型语言。这就是说,与C语言和C的......
  • 为什么只有Python可以爬虫,C++可以吗?
    Python(英国发音:/ˈpaɪθən/;美国发音:/ˈpaɪθɑːn/),是一种广泛使用的解释型、面向对象、动态数据类型的高级程序设计语言。Python支持多种编程范型,包括结构化、过程式、反射式、面向对象和函数式编程。它拥有动态类型系统和垃圾回收功能,能够自动管理内存使用,并且其本身拥有一个......