什么是具有以下要求的进程间通信(IPC)框架\技术:
- 在两个Python进程之间传输原生Python对象
- 高效的时间和CPU(RAM效率无关)
- 跨平台Win\Linux
- 很高兴有:工作与PyPy
更新1:进程在同一台主机上,并使用相同版本的Python和其他模块
更新2:进程由用户独立运行,其中没有一个产生其他的
什么是具有以下要求的进程间通信(IPC)框架\技术:
更新1:进程在同一台主机上,并使用相同版本的Python和其他模块
更新2:进程由用户独立运行,其中没有一个产生其他的
经过一些测试,我发现以下方法适用于使用
mmap
的Linux。
Linux有
/dev/shm
。 如果使用POSIX
shm_open
创建共享内存,则会在此文件夹中创建一个新文件。
虽然python的
mmap
模块没有提供
shm_open
函数。 我们可以使用普通的
open
在
/dev/shm
中创建一个文件,它实际上是相似的,并且驻留在内存中。 (使用
os.unlink
将其移除)
那么对于IPC,我们可以使用
mmap
将该文件映射到不同进程的虚拟内存空间。 所有进程共享该内存。 Python可以使用内存作为缓冲区,并在其上创建字节和numpy数组等对象。 或者我们可以通过
ctypes
接口使用它。
当然,仍然需要进程同步原语来避免竞争条件。
参见
mmap doc
,
ctypes doc
和
numpy。加载具有
。
mmap_mode
选项的
Parallel Python可能值得一看,它适用于Windows,OS X和Linux(我似乎记得我在UltraSPARC Solaris10机器上使用过它)。 不知道它是否适用于PyPy,但它似乎确实适用于Psyco。
使用multiprocessing开始。
如果您需要多个CPU,请查看celery。