Joblib 简介

Joblib 是一个轻量级的 Python 工具集,主要用于两个方面:

  1. 结果缓存(Memoization)
  • 利用 Memory 类,可以将函数的输出结果存储到磁盘上,避免多次重复计算。特别适合于数据处理和机器学习中一些耗时计算的场景。
  1. 并行计算
  • 利用 Paralleldelayed,可以方便地将循环中的任务分发到多个 CPU 核心上运行,从而加速计算过程。

这些功能使得 Joblib 成为数据科学、机器学习和大数据处理中常用的工具,尤其在模型训练和预处理环节能够大幅减少重复计算的时间。


基本使用方法与示例

1. 结果缓存(Caching)

使用场景: 例如,当你在处理大量数据或训练机器学习模型时,有些函数可能耗时较长,通过缓存相同输入的结果可以避免重复计算。

示例代码:

登录后复制
import numpy as np
from joblib import Memory

# 设置缓存目录
cachedir = './joblib_cache'
mem = Memory(cachedir, verbose=0)

# 定义一个耗时函数,比如计算数组的平方
@mem.cache
def compute_square(arr):
    print("正在计算…")
    return np.square(arr)

# 使用函数进行计算
data = np.arange(5)
result1 = compute_square(data)  # 第一次调用,实际计算
result2 = compute_square(data)  # 第二次调用,从缓存中加载,不会打印“正在计算…”
print(result1)
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.

在第一次调用时,函数会实际运行并将结果存储到缓存中;后续相同输入的调用则直接从缓存中加载结果,从而节省时间。


2. 并行计算

使用场景: 当你有大量独立任务需要并行计算时,可以利用 Paralleldelayed 来分发任务到多个核心上执行。

示例代码:

登录后复制
from joblib import Parallel, delayed
import math

# 定义一个简单函数,例如计算平方根
def compute_sqrt(x):
    return math.sqrt(x)

# 使用 Parallel 和 delayed 来并行计算 0-9 的平方根
results = Par