[英]Passing shared memory object between two processes via socket in Python
[英]Passing variables between two python processes
我打算制作一个如下的程序结构
PS1是一个持续运行的python程序。 PC1,PC2,PC3是客户端python程序。 PS1具有变量哈希表,每当PC1,PC2 ...要求哈希表时,PS1会将其传递给它们。
这样做的目的是将表保留在内存中,因为它是一个巨大的变量(占用10G内存),并且每次计算都非常昂贵。 将其存储在硬盘中(使用pickle或json)并在需要时每次读取它都是不可行的。 读取时间太长。
所以我想知道是否有一种方法可以将python变量永久保存在内存中 ,以便可以在需要时快速使用它。
当好的轮毂已经存在时,您正在尝试重塑方形轮毂!
让我们上一层描述您的需求:
恕我直言,我们正面临着创建数据库的目的。 对于常见用例,让许多进程全部使用其自己的10G对象副本是一种内存浪费,并且常见的方式是一个进程拥有数据,而其他进程发送对数据的请求。 您对问题的描述不够,所以我不能说最好的解决方案是:
TL / DR:我的建议是尝试使用高质量的数据库和可选的专用cheche来测试性能。 这些解决方案几乎可以在不同机器上实现开箱即用的负载平衡。 只有在这种方法不起作用的情况下,才能仔细分析内存需求,并确保记录客户端进程数和数据库大小的限制,以便将来维护和使用共享内存-只读数据暗示共享内存可以是一个不错的解决方案
简而言之,要实现您的要求,您需要从multiprocessing.sharedctypes模块创建一个字节数组作为RawArray,该字节数组对于PS1服务器中的整个哈希表足够大,然后将哈希表存储在该RawArray中。 PS1需要是启动PC1,PC2等的进程,然后可以继承对RawArray的访问。 您可以创建自己的对象类,该对象类提供哈希表接口,通过该接口可以访问表中的各个变量,这些变量可以分别传递给从共享RawArray读取的每个PC#进程。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.