最简单易用,Python 并行加速技巧还要用这招

我们在日常使用Python进行各种数据计算处理任务时,若想要获得明显的计算加速效果,最简单明了的方式就是想办法将默认运行在单个进程上的任务,扩展到使用多进程或多线程的方式执行。

而对于我们这些从事数据分析工作的人员而言,以最简单的方式实现等价的加速运算的效果尤为重要,从而避免将时间过多花费在编写程序上。

而今天我就来带大家学习如何利用joblib这个非常简单易用的库中的相关功能,来快速实现并行计算加速效果。喜欢记得收藏、点赞、关注。

文末提供完整代码、数据、技术沟通
图片

2 使用joblib进行并行计算

作为一个被广泛使用的第三方Python库(譬如scikit-learn项框架中就大量使用joblib进行众多机器学习算法的并行加速),我们可以使用pip install joblib对其进行安装,安装完成后,下面我们来学习一下joblib中有关并行运算的常用方法:

2.1 使用Parallel与delayed进行并行加速

joblib中实现并行计算只需要使用到其Paralleldelayed方法即可,使用起来非常简单方便,下面我们直接以一个小例子来演示:

joblib实现并行运算的思想是将一组通过循环产生的串行计算子任务,以多进程或多线程的方式进行调度,而我们针对自定义的运算任务需要做的仅仅是将它们封装为函数的形式即可,譬如:

import time

def task_demo1():
    
    time.sleep(1)
    
    return time.time()

接着只需要像下面的形式一样,为Parallel()设置相关参数后,衔接循环创建子任务的列表推导过程,其中利用delayed()包裹自定义任务函数,再衔接()传递任务函数所需的参数即可,其中n_jobs参数用于设置并行任务同时执行的worker数量,因此在这个例子中可以看到进度条是按照4个一组递增的,可以看到最终时间开销也达到了并行加速效果:
图片

其中可以根据计算任务以及机器CPU核心数具体情况为Parallel()调节参数,核心参数有:

  • backend:用于设置并行方式,其中多进程方式有'loky'(更稳定)和'multiprocessing'两种可选项,多线程有'threading'一种选项。默认为'loky'

  • n_jobs:用于设置并行任务同时执行的worker数量,当并行方式为多进程时,n_jobs最多可设置为机器CPU逻辑核心数量,超出亦等价于开启全部核心,你也可以设置为-1来快捷开启全部逻辑核心,若你不希望全部CPU资源均被并行任务占用,则可以设置更小的负数来保留适当的空闲核心,譬如设置为-2则开启全部核心-1个核心,设置为-3则开启全部核心-2个核心

譬如下面的例子,在我这台逻辑核心数为8的机器上,保留两个核心进行并行计算:
图片
关于并行方式的选择上,由于Python中多线程时全局解释器锁的限制,如果你的任务是计算密集型,则推荐使用默认的多进程方式加速,如果你的任务是IO密集型譬如文件读写、网络请求等,则多线程是更好的方式且可以将n_jobs设置的很大,举个简单的例子,可以看到,通过多线程并行,我们在5秒的时间里完成了1000次请求,远快于单线程17秒请求100次的成绩(此例仅供参考,大家在学习尝试时请不要过于频繁访问他人的网站):

图片

你可以根据自己实际任务的不同,好好利用joblib来加速你的日常工作。

推荐文章

技术交流

技术交流、求职内推、干货汇总、与 3000+来自阿里、北大、清华、中科院、CMU、腾讯、百度等名校名企开发者互动交流~

目前开通了技术交流群,群友已超过3000人,添加时最好的备注方式为:来源+兴趣方向,方便找到志同道合的朋友

  • 方式①、添加微信号:dkl88191,备注:来自CSDN
  • 方式②、微信搜索公众号:Python学习与数据挖掘,后台回复:加群

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_34160248/article/details/124822371