python进程之间的共享内存

nic*_*ame 11 c python shared-memory

我试图想出一种在python进程之间共享内存的方法.基本上存在多个python进程需要能够READ(仅读取)和使用(无突变)的对象.现在这是使用redis + strings + cPickle实现的,但cPickle占用宝贵的CPU时间,所以我不想使用它.我在互联网上看到的大多数python共享内存实现似乎都需要文件和泡菜,这基本上就是我已经在做的,而且正是我想要避免的.

我想知道的是,是否有办法编写类似...基本上是内存中的python对象数据库/服务器和相应的C模块来与数据库连接?

基本上C模块会向服务器请求写入对象的地址,服务器将使用地址进行响应,然后模块将写入对象,并通知服务器具有给定密钥的对象被写入磁盘.指定的位置.然后,当任何进程想要使用给定键检索对象时,他们只会向db请求给定键的内存位置,服务器将响应该位置,并且模块将知道如何在内存中加载该空间.将python对象传回python进程.

这完全是不合理的还是真的很难实施?我在追逐那些不可能的东西吗?欢迎大家提出意见.谢谢你上网.

小智 10

从 Python 3.8 及更高版本开始,您可以使用multiprocessing.shared_memory.SharedMemory


Joe*_*Joe 5

不无道理.

IPC可以使用内存映射文件完成.Python内置了功能:

http://docs.python.org/library/mmap.html

只需在两个进程中对该文件进行mmap,然后he-presto就有了一个共享文件.当然,您必须在两个流程中轮询它以查看更改.而且你必须在两者之间合作.并确定您希望将数据放入哪种格式.但这是解决问题的常用方法.

  • 但这仍然需要序列化为字节,是吗?OP表示他试图避免这种情况. (6认同)