python代码怎么运行_使用Joblib并行运行Python代码

微信公众号:测度空间

对于大多数问题,并行计算确实可以提高计算速度。 随着PC计算能力的提高,我们可以通过在PC中运行并行代码来简单地提升计算速度。Joblib就是这样一个可以简单地将Python代码转换为并行计算模式的软件包,它可非常简单并行我们的程序,从而提高计算速度。

Joblib是一组用于在Python中提供轻量级流水线的工具。 它具有以下功能:

  • 透明的磁盘缓存功能和“懒惰”执行模式,简单的并行计算
  • Joblib对numpy大型数组进行了特定的优化,简单,快速。

以下我们使用一个简单的例子来说明如何利用Joblib实现并行计算。 我们使用单个参数i定义一个简单的函数my_fun()。 此函数将等待1秒,然后计算i**2的平方根,也就是返回i本身。

from joblib import Parallel, delayed
import time, math

def my_fun(i):
    """ We define a simple function here.
    """
    time.sleep(1)
    return math.sqrt(i**2)

这里我们将总迭代次数设置为10.我们使用time.time()函数来计算my_fun()的运行时间。 如果使用简单的for循环,计算时间约为10秒。

num = 10
start = time.time()
for i in range(num):
    my_fun(i)

end = time.time()

print('{:.4f} s'.format(end-start))

10.0387 s

使用Joblib中的Paralleldelayed函数,我们可以简单地配置my_fun()函数的并行运行。 其中我们会用到几个参数,n_jobs是并行作业的数量,我们在这里将它设置为2imy_fun()函数的输入参数,依然是10次迭代。两个并行任务给节约了大约一半的for循环运行时间,结果并行大约需要5秒。

start = time.time()
# n_jobs is the number of parallel jobs
Parallel(n_jobs=2)(delayed(my_fun)(i) for i in range(num))
end = time.time()
print('{:.4f} s'.format(end-start))

5.6560 s

就是这么简单! 如果我们的函数中有多个参数怎么办? 也很简单。 让我们用两个参数定义一个新函数my_fun_2p(i,j)

def my_fun_2p(i, j):
    """ We define a simple function with two parameters.
    """
    time.sleep(1)
    return math.sqrt(i**j)

j_num = 3
num = 10
start = time.time()
for i in range(num):
    for j in range(j_num):
        my_fun_2p(i, j)

end = time.time()
print('{:.4f} s'.format(end-start))

30.0778 s

start = time.time()
# n_jobs is the number of parallel jobs
Parallel(n_jobs=2)(delayed(my_fun_2p)(i, j) for i in range(num) for j in range(j_num))
end = time.time()
print('{:.4f} s'.format(end-start))

15.0622 s

除了并行计算功能外,Joblib还具有以下功能:

  • 快速磁盘缓存:Python函数的memoize或make-like功能,适用于任意Python对象,包括大型numpy数组。
  • 快速压缩:替代pickle,使用joblib.dump和joblib.load可以提高大数据的读取和存储效率。

更多详情可参见Joblib官网。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值