如何在python中跨多处理器共享内存



我有一个很大的字典,我想通过如下多处理来处理它:

import multiprocessing as mp
with mp.Pool() as p:
# x is a dictionary of dictionary, f is a function, v is a dictionary
y = dict(p.map(f, ((k, v, *something*) for k, v in x.items()))) 

然而,上述处理甚至比单个处理慢。我怀疑将我的大字典复制到每个子处理器会使它变慢。我尝试管理器,但没有找到正确的语法。我想问一下在python中跨多处理器共享内存的正确方法。

由于我将多次重用子处理器,因此在每个子处理器中预加载字典也是很好的。但是,我还是没有找到正确的语法。

我终于成功地使用mp.Process.预加载了我的数据集

代码如下:

import multiprocessing as mp
class mySubprocess(mp.Process):
def __init__(self, path, in_queue, out_queue, *args, **kwargs):
super().__init__(*args, **kwargs)
self.my_dict = ** preload something **
self.in_queue = in_queue
self.out_queue = out_queue
def run(self):
while True:
my_input= self.in_queue.get()
my_return = ** do something **
self.out_queue.put(my_return)
class myClass:
def __init__(self, path_list, *args, **kwargs):
n = len(path_list)
self.in_queue = [mp.Queue()] * n
self.out_queue = [mp.Queue()] * n
self.processes = [mySubprocess(path, self.in_queue[i], self.out_queue[i]) for (i, path) in enumerate(path_list)]
for p in self.processes:
p.start()
def run(self, ** something **):
for q in self.in_queue:
my_input = ** do something **
q.put(my_input)

output_list = []
for q in self.out_queue:
my_return = q.get()
output_list.append(my_return)

相关内容

  • 没有找到相关文章

最新更新