以下是符合以下要求的进程间通信(IPC)框架/技术:
- 在两个Python进程之间传输本地Python对象
- 时间和CPU高效(RAM效率无关紧要)
- 跨平台Win\Linux
- 最好:与PyPy兼容
更新1:进程位于同一主机上,并使用相同版本的Python和其他模块
更新2:进程由用户独立运行,没有一个进程会生成其他进程
以下是符合以下要求的进程间通信(IPC)框架/技术:
更新1:进程位于同一主机上,并使用相同版本的Python和其他模块
更新2:进程由用户独立运行,没有一个进程会生成其他进程
原生对象由于引用计数的原因不能在进程之间共享。
可以使用pickle并使用unix域套接字、mmap、zeromq或中介(如sqlite3)进行共享。
使用 multiprocessing 开始。
如果需要多个 CPU,请查看 celery。
multiprocessing
是否相关? - Jonathan Livni无论是execnet还是Pyro,都提到了PyPy <-> CPython
通信。Python维基的Parallel Processing页面中的其他软件包可能也适用。
mmap
。/dev/shm
。如果您使用POSIX的shm_open
创建共享内存,则会在此文件夹中创建一个新文件。mmap
模块不提供shm_open
函数。但我们可以使用普通的open
在/dev/shm
中创建一个文件,它实际上类似并驻留在内存中。(使用os.unlink
将其删除)mmap
将该文件映射到不同进程的虚拟内存空间。所有进程共享该内存。Python可以使用该内存作为缓冲区,并在其上创建像字节和numpy数组之类的对象。或者我们可以通过ctypes
接口来使用它。mmap_mode
选项的numpy.load
。Parallel Python 可以值得一试,它可以在 Windows、OS X 和 Linux 上运行(我记得我曾经在一台 UltraSPARC Solaris 10 机器上使用过它)。我不知道它是否适用于 PyPy,但是似乎适用于 Psyco。
mmap
使用示例,以在两个独立运行的脚本之间共享数据,最终在这里找到了一个:Sharing Python data between processes using mmap | schmichael's blog - 但似乎仍然需要打开文件并将要共享的数据存储在那里; mmap(显然)只是提供了一个特殊的接口来访问此文件(我原本希望mmap可以直接利用内存,而不是绕过临时文件)。 - sdaaushm_open
函数来创建内存文件,可以用于避免使用临时文件,Python是否也有类似的功能? - doraemon