如何用Python joblib填充全局变量?

如何用Python joblib填充全局变量?,python,multiprocessing,global-variables,joblib,Python,Multiprocessing,Global Variables,Joblib,我想并行运行一些代码,并在Python中用结果填充一个全局变量。我已经编写了一个示例代码来检查joblib的行为,但我不知道如何返回结果。示例代码为: import numpy as np import multiprocessing from joblib import Parallel, delayed global_var = np.zeros(10) def populate(idx): print('I am core',idx,'\') global_var[idx]

我想并行运行一些代码,并在Python中用结果填充一个全局变量。我已经编写了一个示例代码来检查joblib的行为,但我不知道如何返回结果。示例代码为:

import numpy as np
import multiprocessing
from joblib import Parallel, delayed

global_var = np.zeros(10)

def populate(idx):
   print('I am core',idx,'\')
   global_var[idx] = idx

num_cores = multiprocessing.cpu_count()
Parallel(n_jobs=num_cores)(delayed(populate)(idx) for idx in range(len(global_var))`
如果我在运行任何其他操作之前检查全局变量,它是一个零数组;当我运行代码时,数组中充满了“None”值

如何从函数返回值并填充全局数组?


非常感谢您!=)

基本上,您不能这样做:您需要指定具有共享内存的后端,或者手动创建共享内存。这有点复杂(但包含在文档中)


在这里,实现它的最简单方法是定义函数,使其返回计算结果,然后处理这些结果(在主进程中调用
Parallel(..)(..)
返回)(在以
Parallel
开头的行之后).

我知道这是一条老线索,但其他人可能会感兴趣,知道这是可能的

require='sharedmem'
添加到并行初始化中。 您可以阅读更多关于并行化循环的示例


在你的例子中:

import numpy as np
import multiprocessing
from joblib import Parallel, delayed

global_var = np.zeros(10)

def populate(idx):
   print('I am core',idx,'\'')
   global_var[idx] = idx

num_cores = multiprocessing.cpu_count()
Parallel(n_jobs=num_cores, require='sharedmem')(delayed(populate)(idx) for idx in range(len(global_var)))

print(global_var)
[0.1.2.3.4.5.6.7.8.9]


谢谢你,兄弟。你救了我一天。仅供参考,这使用了线程后端,在大多数情况下,在Python中,它违背了并行的目的