[英]Share a dictionary storing objects between several processes in Python
[英]Python: share a large dictionary of objects between multiple processes
我一直在阅读有关如何在父进程中共享子进程需要read-only
访问权限的大对象的内容。 也许我错过了一些重要的帖子。 我似乎没有为依赖于整个对象的操作找到一个干净的答案(总是分块并分配给工人或通过过滤器管道)。
让我们考虑以下问题。 我有一些300维的浮子向量,其中有一百万个。 假设它们被加载到float32
dtype的numpy
数组中。 每个向量与string
的键相关联。
让我们将这个键值(字符串数组)关系存储在一个dict
。 现在我有一个大的内存中对象。
让我们将我的父进程视为server
进程。 它捕获"key1,key2"
形式的查询。 期望计算并返回key1和key2之间的成对欧几里德距离。 生成子进程以同时处理多个查询。
人们无法对字典进行分块,因为用户查询可以是任何类型的。 孩子也需要处理密钥未找到的情况等。
如何在multiprocessing
中multiprocessing
整个字典中只读模式的子进程?
更新:
dict
可以被任何类似哈希表的对象替换,并保持键值关系 您可以使用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()
可在多个进程之间共享。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.