高效的Python到Python IPC
具有以下要求的框架\技术是什么:高效的Python到Python IPC,python,ipc,inter-process-communicat,Python,Ipc,Inter Process Communicat,具有以下要求的框架\技术是什么: 在两个Python进程之间传输本机Python对象 高效的时间和CPU(RAM效率无关) 跨平台Win\Linux 很高兴拥有:与您一起工作 更新1:这些进程位于同一主机上,并使用相同版本的Python和其他模块 更新2:这些进程由用户独立运行,没有一个会产生其他进程 如果需要多个CPU,请查看。本机对象不会在进程之间共享(由于引用计数) 相反,您可以使用unix域套接字、mmap、zeromq或设计用于并发访问的sqlite3这样的中介对它们进行pickl
- 在两个Python进程之间传输本机Python对象
- 高效的时间和CPU(RAM效率无关)
- 跨平台Win\Linux
- 很高兴拥有:与您一起工作
如果需要多个CPU,请查看。本机对象不会在进程之间共享(由于引用计数)
相反,您可以使用unix域套接字、mmap、zeromq或设计用于并发访问的sqlite3这样的中介对它们进行pickle和共享。可能值得一看,它在Windows、OS X和Linux上工作(我似乎记得不久前我在UltraSPARC Solaris 10机器上使用过它)。我不知道它是否适用于PyPy,但是它。两者都适用,并提及
PyPyCpython
通信。pythonwiki页面上的其他包可能也适用。经过一些测试,我发现以下方法适用于使用mmap
的Linux
Linux有/dev/shm
。如果使用POSIXshm_open
创建共享内存,将在此文件夹中创建一个新文件
尽管python的mmap
模块没有提供shm_open
功能。我们可以使用一个普通的open
在/dev/shm
中创建一个文件,它实际上是类似的,并且驻留在内存中。(使用os.unlink
将其删除)
然后对于IPC,我们可以使用mmap
将该文件映射到不同进程的虚拟内存空间。所有进程都共享该内存。Python可以使用内存作为缓冲区,并在上面创建诸如字节和numpy数组之类的对象。或者我们可以通过ctypes
界面使用它
当然,仍然需要进程同步原语来避免竞争条件
请参阅,其中有一个
mmap_模式
选项。您对XML-RPC有何看法?我喜欢XML-RPC,但OP的问题集中在cpu效率上,因此XML-RPC没有成功。酸洗需要时间和cpu,但节省RAM,我的要求正好相反。有没有一种方法可以在不酸洗的情况下与它们通信?我们正在寻找一个简单的示例,说明如何使用mmap
在两个独立运行的脚本之间共享数据,最后在这里找到了一个示例:-但您似乎仍然必须打开一个文件并将要共享的数据存储在那里;mmap(显然)只是提供了一个特殊的接口来访问这个文件(否则我希望mmap可以直接利用内存,绕过临时文件)@sdaau关于mmap绑定到临时文件:不是真的。您可以创建所谓的匿名mmap,它不依赖于文件,但共享区域仅适用于同一进程上的线程(当然)或创建mmap后分叉的子进程,因此,对于与相互依赖运行的进程相关的多处理
需求来说,它没有用处?(不是彼此产生的)@Jonathan:“相互依赖”?多处理包提供队列和管道,以便进程可以彼此同步并传递对象。这符合“相互依存”的条件吗?我是说当然是独立的…@乔纳森:这是要求吗?如果是这样,请更新问题以包括所有事实。该软件包提供了许多功能,用于构建使用internet协议进行通信的分布式服务器。Afaik execnet必须设置自己的进程。我知道这个答案很古老。。但我要试一试!既然可以在/dev/shm中打开文件,那么使用mmap的目的是什么?我不能通过读写/dev/shm中的文件在不同的应用程序之间来回传递信息吗?据我所知,这些文件不会被写入硬盘?虽然我没有测试你说的内容,但我觉得应该也可以。但是,为了让您像使用变量而不是文件一样使用内存,映射它可能更方便。很高兴看到你的实验更新。