31

What would be an inter-process communication (IPC) framework\technique with the following requirements:

  • Transfer native Python objects between two Python processes
  • Efficient in time and CPU (RAM efficiency irrelevant)
  • Cross-platform Win\Linux
  • Nice to have: works with PyPy

UPDATE 1: the processes are on the same host and use the same versions of Python and other modules

UPDATE 2: the processes are run independently by the user, no one of them spawns the others

4

5 回答 5

20

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

相反,您可以使用 unix 域套接字、mmap、zeromq 或为并发访问设计的 sqlite3 之类的中介来腌制和共享它们。

于 2011-10-20T17:51:53.823 回答
9

使用多处理开始。

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

于 2011-10-20T17:40:39.557 回答
6

execnet和Pyro提到了通信。Python Wiki 的Parallel Processing页面中的其他包可能也适用。PyPy <-> CPython

于 2011-10-21T00:58:57.123 回答
6

经过一些测试,我发现以下方法适用于使用mmap.

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

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

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

当然,仍然需要进程同步原语来避免竞争条件。

请参阅mmap docctypes doc并且numpy.load其中有一个mmap_mode选项。

于 2017-11-17T01:43:36.657 回答
5

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

于 2011-10-20T18:06:16.573 回答