我一直在阅读有关如何在父流程中共享子进程需要read-only
访问权限的大对象的内容。也许我错过了一些重要的帖子。我似乎没有为依赖于整个对象的操作找到一个干净的答案(总是分块并分发给工人或通过过滤器管道)。
让我们考虑以下问题。我有一些300维的浮子向量,其中有一百万个。我们假设它们被加载到numpy
dtype的float32
数组中。每个向量都与string
的密钥相关联。
让我们将这个键值(字符串数组)关系存储在dict
中。现在我有一个大的内存对象。
让我们将父进程视为server
进程。它捕获"key1,key2"
形式的查询。期望计算并返回key1和key2之间的成对欧几里德距离。生成子进程以同时处理多个查询。
无法对字典进行分块,因为用户查询可以是任何类型。孩子也需要处理key-not-found等的情况。
如何在multiprocessing
的整个词典中处理依赖于只读模式的子进程?
更新
dict
可以被任何类似哈希表的对象替换并保持键值关系答案 0 :(得分:0)
您可以使用Manager中的dict()作为以下代码:
from multiprocessing import Process, Manager
def f(d, l):
d[1] = '1'
d['2'] = 2
d[0.25] = None
l.reverse()
if __name__ == '__main__':
with Manager() as manager:
d = manager.dict()
l = manager.list(range(10))
p = Process(target=f, args=(d, l))
p.start()
p.join()
print(d)
print(l)
它打印:
{0.25: None, 1: '1', '2': 2}
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
dict()
可在多个进程之间共享。