【发布时间】:2021-05-16 12:20:03
【问题描述】:
我正在尝试为 Python 和 C/C++ 进程的任意组合之间的进程间通信创建一个快速库。 (i.e. Python <-> Python, Python <-> C++, or C++ <-> Python)
为了实现最快的实现,我正在尝试使用 mmap 来利用共享内存。计划是让两个进程通过“mmap-ing”同一个文件来共享内存,并读写这个共享内存来进行通信。
我想避免对真实文件进行任何实际写入,而只是想使用文件名作为两个进程连接的句柄。但是,我挂断了对mmap 的以下电话:
self.memory = mmap.mmap(fileno, self.maxlen)
我在哪里得到以下错误:
FileNotFoundError: [Errno 2] No such file or directory: 'shared_memory_file'
或者如果我创建一个空文件:
ValueError: mmap length is greater than file size
我是否需要简单地创建一个用空值填充的空文件才能像这样使用共享内存?
如何在 Python 中以 C++ 也可以使用的方式在不相关的进程(不是父子通信)之间使用 mmap 共享内存? (不使用 multiprocessing.shared_memory)
【问题讨论】:
-
如果你想拥有一个由物理文件支持的共享内存,你必须有一个文件,并且文件必须有足够的大小。如果你不需要物理文件来支持你的内存,而只是想要一个共享段,你可以使用创建没有文件的共享内存的函数,分别是 SysV
shmget和朋友,或 Posixshm_open和他们的朋友. -
@SergeyA,您能否将我链接到在 Python 中执行此操作的好资源?有没有跨平台的方法?
标签: python c++ ipc shared-memory