Python 多进程 mp.Pool 多线程 ThreadPoolExecutor 优缺点

【Python】Python进程池multiprocessing.Pool八个函数对比:apply、apply_async、map、map_async、imap、starmap... map 和 map_async 可以并发执行任务。apply 和 apply_async 一次只能执行一个任务,但 apply_async 可以异步执行,因而也可以实现并发。 一、单次执行 1、单次同步执行 一个任务执行完再进行下一个任务 import multiprocessing import time def func(msg): print("msg:", msg) time.sleep(2) print("end") if __name__ == "__m 阅读详情

Python中的多进程(使用multiprocessing.Pool)和多线程(使用concurrent.futures.ThreadPoolExecutor)都是实现并发执行任务的方法,但它们各有优缺点,适用于不同的场景。下面分别讨论两者的特点:

multiprocessing.Pool
优点:

避免全局解释器锁(GIL):Python中的GIL限制了同一个时刻只有一个线程可以执行Python字节码,而多进程由于每个进程都有自己的Python解释器和内存空间,因此可以真正并行地执行多个任务。
适合CPU密集型任务:在多核CPU上,当任务主要受CPU性能限制时,使用多进程可以显著提高程序的执行速度。
进程间数据隔离:每个进程都运行在独立的内存空间内,互不影响,可以避免共享资源导致的同步问题。
缺点:

开销较大:创建进程比创建线程需要更多的时间和资源,尤其是在任务数量很大或者任务执行时间很短时,进程的创建和销毁会带来相对较大的开销。
数据共享复杂:进程间的数据共享没有线程那么直接,通常需要借助进程间通信(IPC)机制,如管道、队列等方式。
跨平台问题:虽然multiprocessing模块为跨平台设计,但在不同操作系统中表现可能稍有差异。
concurrent.futures.ThreadPoolExecutor
优点:

轻量级:创建线程的代价远小于创建进程,线程共享相同的内存空间,并且上下文切换的代价也低于进程。
适合IO密集型任务:对于IO密集型任务,如文件读写、网络请求等,多线程可以在一个线程等待IO时切换到另一个线程继续工作,从而提高效率。
数据共享简单:由于线程共享内存空间,线程间通信和数据共享非常方便。
缺点:

受GIL限制:在执行纯Python代码时,GIL确保同一时刻只有一个线程执行,这意味着线程并不能利用多核CPU的计算资源进行真正的并行计算。
同步复杂:共享资源可能导致竞态条件,需要通过锁、信号量等同步机制来控制,如果管理不当容易引发死锁等问题。
对CPU密集型任务不友好:在CPU密集型任务下,线程仍然受GIL影响无法提供实质性的性能提升。
总的来说,选择使用多进程还是多线程主要取决于任务的类型以及你想要达成的目标。如果你的任务是CPU密集型的,并且每个任务执行时间足够长,那么多进程可能更适合。相反,如果你的任务主要是IO密集型的,那么多线程可能更加合适。同时,你也要考虑进程和线程的同步、通信和数据共享等潜在问题,并选择合适的策略来处理这些挑战。

Python multiprocessing模块Pool类介绍 multiprocessing.Pool 类是 Python 中用于并行处理任务的强大工具,它可以创建一个进程池,允许你在多个进程中并行执行任务,从而充分利用多核 CPU 的性能。 阅读详情

相关推荐

python补充之Multiprocessing(四)进程池Pool

python知识之Multiprocessing(四)进程池Pool 上一章写了几个增加运算速度的方法,这一章记录一下进程池Pool,是一个多进程多核运算的方法,可以说是吧CPU发挥到极致的方法了。 下面代码给出演示: 路径: /home/pi/Desktop/My_Project/Python_Learning/4_MultiprocessingLearning.py 代码: import m...

weixin_44086593的博客 929

Python多进程4 进程池——Pool

原文地址 学习来源 是multiprocessing模块下的一个类,是一种创建多进程的更加简便的方式,可以更加方便的分配任务与传递参数。 pool = mp.Pool(processes=6)生成进程池 Pool的两个任务分配的函数 .map(函数名,参数列表的列表)所谓的参数列表的列表是把所有的任务的参数列表再封装到一个列表中,形成一个二维列表。这样Pool就会根据把列表中的参数分配给自己所拥有...

BBJG_001的博客 3574

bcftools学习笔记(一)

欢迎关注"生信修炼手册"!本篇主要介绍index, view, query, sort, reheader这五个命令。1. indexindex命令用于对VCF文件建立索...

庐州月光的博客 6012

Python 多进程 multiprocessing.Pool类详解

如果操作的对象数目不大时,还可以直接使用Process类动态的生成多个进程,十几个还好,但是如果上百个甚至更多,那手动去限制进程数量就显得特别的繁琐,此时进程池就派上用场了。程序中的r1表示全部进程执行结束后全局的返回结果集,run函数有返回值,所以一个进程对应一个返回结果,这个结果存在一个列表中,也就是一个结果堆中,实际上是用了队列的原理,等待所有进程都执行完毕,就返回这个列表(列表的顺序不定)。如果池满,请求就会告知先等待,直到池中有进程结束,才会创建新的进程来执行这些请求。

biggolden1的博客 5473

【移远EG800K-CN】从AT指令到MQTT实战:4G模块云端通信全解析

本文详细解析移远EG800K-CN 4G模块的AT指令应用与MQTT云端通信实战。从硬件连接到网络配置,再到MQTT协议的数据上报与命令接收,提供了完整的物联网通信解决方案,帮助开发者快速实现设备与云端的稳定数据交互。

o1p2q3r的博客 560

计算光刻效率革命:为什么Hopkins模型比Abbe模型快?深入解析TCC的魔力

本文深入解析了计算光刻中Hopkins模型相比Abbe模型的效率优势,重点探讨了TCC(透射交叉系数)的工程智慧。通过预计算光学系统特性并复用TCC矩阵,Hopkins模型实现了数量级的加速,特别适用于复杂照明条件下的光刻仿真。文章详细介绍了TCC的物理意义、模态分解技术以及GPU并行计算等关键加速策略,为半导体制造中的光刻工艺优化提供了实用见解。

weixin_33364627的博客 389

并行分布式框架:Celery、rq、funboost

Celery是一个异步任务的调度工具,也可以叫做 "分布式任务队列(Distributed Task Queue)"。

freeking101的博客 5万+

量化策略开发步骤系列(5)前向测试和统计意义

我们在第 4 部分,展示了我们策略的样本外测试并讨论了其结果。用于开发模型的数据是 2018 年至 2021 年的数据,测试数据是 2021 年至 2022 年的数据。但有一种方法可以更好地利用我们的数据。

码上助君的专栏 1850

python获取电脑几核几线程_Python 基本功: 14. 多核并行计算

现在的笔记本电脑,台式机都流行多核心,低频率的架构,原因是低频率低耗电,而多核心又可以在并行计算中表现出色。在上一篇教程中:多多教Python:Python 基本功: 13. 多线程运算提速​zhuanlan.zhihu.com描述了如何用 Python 的多线程模块来实现计算提速,但是受限于在一个进程,也就是单核心上的运算。而这篇教程,将告诉大家如何利用 Python 在多核心上做并行计算。教程...

weixin_39947812的博客 598

SAP 财务快速记账之--科目分配模型(Account assignment model )

SAP FICO 运维解决方案

lijinbao171022的博客 1771

MacBook上玩转国民技术N32G430:从零搭建ARM开发环境(VSCode + pyOCD)

本文详细介绍了在MacBook上搭建国民技术N32G430的ARM开发环境,涵盖VSCode配置、pyOCD调试及一键编译烧录全流程。通过Homebrew安装工具链、配置Python环境及VSCode插件,开发者可在MacOS高效开发嵌入式应用,特别适合国产芯片N32G430的开发者参考。

weixin_30614109的博客 436

Python编程:基于multiprocessing的Pool的并行计算

之前做机器视觉任务处理图片时会遇到耗时较长的情况,当时就想着如果使用多进程应该能有提升。于是这里先做一个代码框架的记录,以后需要时再用上。

xieocean的博客 925

MCU中GPIO口的驱动方式

MCU中GPIO口的驱动方式 导读: MCU芯片中GPIO口的驱动方式大的可分为输出和输入两类,小的分可以分为8种。 一、四种输入方式 ①上拉输入: 上拉输入抗干扰能力强,特别适合接地信号的输入(比如低电平有效的按键信号输入)。其工作原理如图1所示。 I/O 端口与TTL 施密特触发器之前接入了一个30K~50K 欧姆的上拉电阻,当I/O 端口悬空时,此时MCU 也能读到稳定的高电平状态,...

优快云Frewen的博客 3375

python测试开发基础---multiprocessing.Pool

进程池是一个包含多个工作进程的池子,用来处理多个任务。你可以将任务分配给池中的进程,池会自动管理这些进程。模块允许你使用多个进程并行执行任务,这可以提高程序的性能,尤其是在需要大量计算的情况下。类是一个常用工具,可以帮助你更轻松地管理多个进程。

小白的学习日志 1753

解决方案:“Project1.exe”(Win32): 已加载“C:\Windows\SysWOW64\KernelBase.dll”。无法查找或打开 PDB 文件。

解决方案:“Project1.exe”(Win32): 已加载“C:\Windows\SysWOW64\KernelBase.dll”。无法查找或打开 PDB 文件。 添加getchar();代码块解决无法查找或打开PDB文件。 错误提示: “Project1.exe”(Win32): 已加载“C:\Windows\SysWOW64\ntdll.dll”。无法查找或打开 PDB 文件。 “Pro...

m0_46523403的博客 6420

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

2.5.4.2Python-多进程

总目录:https://www.jianshu.com/p/e406a9bc93a9 Python - 子目录:https://www.jianshu.com/p/50b432cb9460 创建进程 当然从最开始创建一个线程开始 import multiprocessingas mp def job(a,...

寒暄的博客 479

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Python multiprocessing进程池使用详解

python multiprocessing应用介绍及常见问题分析

weixin_39253570的博客 2585

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

【python】基于multiprocessing.Pool实现python并行化的坑和解决方案

运行上面多进程的程序,调用的程序只运行了一小部分就退出了,也没个报错。让人摸不着头脑。看起来没有报错,其实有报错!!!把上面的程序 pool.apply_async中加入,就发现问题了可以看到,有报错!!!!但也很奇怪,不使用多进程,不会报错。可能我程序写的还是不好。反正改完报错,多进程就能顺利运行了。

weixin_43693967的博客 1642

Python中的Process和Pool: 多进程处理的利器

Process类是模块中的一个核心类,用于创建一个单独的进程。每个Process对象都可以执行一个函数或者方法,从而在单独的进程中执行任务。Process和Pool,并通过示例代码演示了它们的基本用法。同时,也探讨了多进程在实际项目中的应用场景,包括并行计算、IO密集型任务和并行任务处理等。多进程处理是Python中一种强大的并行处理技术,可以提高程序的性能和效率,特别是在处理大规模数据或IO密集型任务时具有明显的优势。希望本文能够帮助大家更好地理解和运用多进程处理技术。

涛哥聊Python 2908

Python中的并行处理(Pool.map()、Pool.starmap()、Pool.apply()、)

1.并行处理 并行处理是一种在同一台计算机的多个处理器中同时运行任务的工作模式。这种工作模式的目的就是减少总的任务处理时间,但是进程之间的通信会有额外的开销,因此对小的任务而言,总的任务时间会有所增加而不是是减少。 在Python语言中,multiprocessing模块通过使用子进程(而不是线程)来运行独立的并行进程。它可以让您利用机器上的多个处理器(Windows和Unix),也就是说,多个进程可以完全独立的在内存中运行 2.自己的设备最多可以进行多少个并行处理 ......

Mogul的博客 3万+

python 进程池multiprocessing.Pool

python多进程

wenfei852283049的博客 1438

Python使用multiprocessing实现多进程

大家好,当我们工作中涉及到处理大量数据、并行计算或并发任务时,Python的multiprocessing模块是一个强大而实用的工具。通过它,我们可以轻松地利用多核处理器的优势,将任务分配给多个进程并同时执行,从而提高程序的性能和效率。在本文中,我们将探索如何使用multiprocessing模块实现多进程编程。将介绍进程池的概念和用法,以及如何使用它来管理和调度多个进程。我们还将讨论并发任务的处理、进程间通信和结果获取等关键问题,希望能给大家的工作带来一些帮助。

若不知道要驶向哪个码头,那么任何风都不会是顺风。 9663

Python学习之路——8.进程(Process)

就着线程的基础上补充说明进程

m0_73902371的博客 980

Python进程池multiprocessing.Pool八个函数对比

在本文中,我们探讨了Python multiprocessing.Pool 类中的八个主要函数:apply(), apply_async(), map(), map_async(), starmap(), starmap_async(), imap(), 和 imap_unordered()的特点和案例。

m0_51661400的博客 2163

ThreadPoolExecutor——高效处理并发任务的必备良器

ThreadPoolExecutor是Java中用于管理线程池的一个类,它能够创建和管理线程池,以提高应用程序的性能和可靠性。它具有灵活的线程池管理、高效的任务处理和可靠的异常处理等特点。尤其适用于任务量大、执行时间长、任务类型多样的应用场景,例如Web服务器、数据库连接池、文件处理等。通过合理地设置线程池参数、处理任务和异常、监控和调优线程池,可以提高应用程序的性能和可靠性,避免任务丢失或线程池崩溃的问题。

xindoo 3612

Python进程池(Pool):最强的并发处理工具,让你事半功倍!

在Python开发中,我们经常需要处理一些耗时的任务,比如处理大量数据、进行图像处理或进行网络爬虫等。这些任务如果使用单一线程进行处理,不仅效率低,还容易被阻塞。为了解决这些问题,Python为我们提供了“进程池(Pool)”这一强大的工具,让我们能够更加高效地处理并发任务。本文将通过简单易懂的示例,带你深入了解Python进程池(Pool)如何提升程序的性能,并展示如何使用它来完成常见的并发任务。包含编程资料、学习路线图、源代码、软件安装包等!点击这里在Python中,进程池(Pool)是。

Candyz7的博客 2078
上一篇: ffmpeg 从视频文件抓取图片 (帧)的用法
下一篇: 解决 python CV2 imread读取中文文件名的问题
大树叶
博客等级 码龄12年 1171粉丝 664原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值