python并行执行中的变量范围

时间:2017-05-10 13:52:46

标签: python

我的问题总结了一个简单的代码如下:

#!/usr/bin/env python
from joblib import Parallel, delayed
import numpy as np
h =  np.ones(3)
def func(i):
    global h
    h[i] = h[i]+i
    print(h[i])
print(h)
Parallel(n_jobs=3)(delayed(func)(i) for i in range(3))
print(h)

输出结果为:

[ 1.  1.  1.]
1.0
2.0
3.0
[ 1.  1.  1.]

但是,我希望修改h值,因为它们在循环内被修改。我做错了什么?

修改:我尝试了backend="threading"建议的答案L_S。它达到了目的。但是,代码以串行方式运行。循环以3个n_jobs启动,我只能看到一个python正在运行top,而有3个python可执行文件在没有指定backend="threading"的情况下运行。

1 个答案:

答案 0 :(得分:0)

  

默认情况下,Parallel使用Python多处理模块来分离单独的Python工作进程,以便在不同的CPU上同时执行任务。

所以,你需要通过backend="threading"

Parallel(n_jobs=3, backend="threading")(delayed(func)(i) for i in range(3))