热门标签:
Q:

高效Python到Python IPC[关闭]

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

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

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

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

原网址
A:

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

相反,您可以使用unix域套接字,mmap,zeromq或专为并发访问而设计的sqlite3中介来提取并共享它们。

所有回答

共 4 条

author avatar

使用multiprocessing开始。

如果您需要多个CPU,请查看celery

author avatar

execnetPyro都提到PyPy <-> CPython通信。 来自Python Wiki的并行处理页面的其他软件包可能也是合适的。

author avatar

经过一些测试,我发现以下方法适用于使用 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 选项的

author avatar

Parallel Python可能值得一看,它适用于Windows,OS X和Linux(我似乎记得我在UltraSPARC Solaris10机器上使用过它)。 不知道它是否适用于PyPy,但它似乎确实适用于Psyco

相似问题