python并行(1)

本文探讨了Python中并行计算的使用,包括Joblib库的`Parallel`类,如何利用多进程和多线程,以及在共享内存中操作数值型数据。文章通过实例解释了如何自动和手动进行内存映射,以提高大型数组处理的效率,并提醒了在并发写入共享内存时可能遇到的问题和解决方案。
摘要由CSDN通过智能技术生成



最近在看scikit learn的random forest源码,之后会公布一些简化版的代码,欢迎大家关注。


【predict_proba】中有一块代码不清楚怎么回事。

https://github.com/scikit-learn/scikit-learn/blob/51a765a/sklearn/ensemble/forest.py#L543

# Parallel loop
all_proba = Parallel(n_jobs=n_jobs, verbose=self.verbose,
                     backend="threading")(
    delayed(_parallel_helper)(e, 'predict_proba', X,
                              check_input=False)
    for e in self.estimators_)


看了这个链接,写得简单易懂【Embarrassingly parallel for loops】:

http://blog.csdn.net/donger_soft/article/details/45305971



一般用法

Joblib提供了一个简单的帮助类来编写并行化的循环。其核心思想是把代码写成生成器表达式的样子,然会再将它转换为并行计算:

>>> from math import sqrt
>>> [sqrt(i ** 2) for i in range(10)]
[0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0]

使用以下方式,可将计算分布到两个CPU上:

>>> from math import sqrt
>>> from joblib import Parallel, delayed
>>> Parallel(n_jobs=2)(delayed(sqrt)(i ** 2) for i in range(10))
[0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0]

以上, Parallel 对象会创建一个进程池,以便在多进程中执行每一个列表项。函数 delayed 是一个创建元组 (function, args, kwargs) 的简单技巧。

注意 
在Windows上使用joblib.Parallel的时候,要保护主循环以避免递归生成子进程 。换句话说,你的代码应该如下:


import ....

def function1(...):
    ...

def function2(...):
    ...

...
if __name__ == '__main__':
    # do stuff with imports and functions defined about
    ...
  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值