高效的Python到Python IPC

Jon*_*han 26 python ipc inter-process-communicat

什么是具有以下要求的进程间通信(IPC)框架\技术:

  • 在两个Python进程之间传输本机Python对象
  • 高效的时间和CPU(RAM效率无关)
  • 跨平台Win\Linux
  • 很高兴:与PyPy合作

更新1:进程位于同一主机上,并使用相同版本的Python和其他模块

更新2:进程由用户独立运行,其中没有一个产生其他进程

Ray*_*ger 18

本机对象不会在进程之间共享(由于引用计数).

相反,您可以使用unix域套接字,mmap,zeromq或专为并发访问而设计的中介(如sqlite3)来挑选它们并共享它们.

  • 我喜欢XML-RPC,但是OP的问题集中在cpu的效率上,因此xml-rpc并没有成功。 (2认同)
  • pickling 需要时间和 CPU,但节省 RAM,我的要求完全相反。有没有一种方法可以在不腌制它们的情况下传达它们? (2认同)

S.L*_*ott 8

使用多处理开始.

如果您需要多个CPU,请查看芹菜.

  • "多处理"是否与相互依赖的进程相关?(不是彼此产生的) (4认同)
  • 我当然是独立的...... (4认同)
  • @Jonathan:这是一个要求吗?如果是,请**更新**问题以包括所有事实.该软件包提供了许多功能,用于使用Internet协议进行通信来构建分布式服 http://docs.python.org/library/multiprocessing.html#module-multiprocessing.connection (2认同)

Try*_*yPy 6

无论execnet火焰兵PyPy <-> CPython的沟通.Python Wiki的Parallel Processing页面中的其他包也可能是合适的.


Liu*_*Sha 6

经过测试,我发现以下方法适用于使用的Linux mmap

Linux有/dev/shm。如果使用POSIX创建共享内存shm_open,则会在此文件夹中创建一个新文件。

尽管python的mmap模块不提供该shm_open功能。我们可以使用法线open在其中创建文件,该文件/dev/shm实际上是相似的并且驻留在内存中。(os.unlink用于删除)

然后对于IPC,我们可以使用mmap将该文件映射到不同进程的虚拟内存空间。所有进程共享该内存。Python可以将内存用作缓冲区并在其顶部创建对象,例如字节和numpy数组。或者我们可以通过ctypes界面使用它。

当然,仍然需要过程同步原语来避免竞争状况。

请参阅mmap docctypes docnumpy.load并且有一个mmap_mode选项。


Chr*_*isC 5

并行Python可能值得一看,它适用于Windows,OS X和Linux(我似乎记得我曾经在UltraSPARC Solaris 10机器上使用过它).我不知道它是否适用于PyPy,但它似乎与Psyco一起使用.