并行生成两个独立的词典

时间:2018-10-25 16:18:02

标签: python dictionary parallel-processing

我想以并行的方式构建功能评价的字典,但是我正在努力寻找如何有效地做到这一点。

以随机构造的矩阵为例:

import functools
import multiprocessing
import numpy as np
import time

#generate random symmetric matrix
N = 500
b = np.random.random_integers(-2000,2000,size=(N,N))
b_symm = (b + b.T)/2

#identity matrix
ident = np.eye(N)

# define worker function:
def func(w, b_mat):

    if w !=0:
        L = np.linalg.inv(1j * w * ident - b_mat)

    else:
        L = np.linalg.pinv(-b_mat)

    return L

我现在想对w的许多值进行采样,并构造一个输出字典。这将是一个令人尴尬的并行问题。我可以使用共享字典来完成此任务,例如:

def dict_builder(w, d):
    d[w] = func(w, b_symm)

manager = multiprocessing.Manager()

val_dict = manager.dict()


wrange = np.linspace(-10,10,200)

processors=2
pool = multiprocessing.Pool(processors)

st = time.time()
data = pool.map(functools.partial(dict_builder, d= val_dict), wrange,2)
pool.close()
pool.join()
en = time.time()
print("parallel test took ",en - st," seconds.")

但是,这似乎比必需的更为复杂,因为我仅在唯一的点评估函数,并且具有共享内存对象的开销。

我想将wrange分成n个块,其中n是处理器的数量,独立构建n个字典,然后将它们组合成一个字典。所以有两个问题:1)这在计算上会有利吗? 2)使用多处理模块实现此目的的最佳方法是什么?

0 个答案:

没有答案