在跨平台(Linux和windows)实时应用程序中,我需要在C++进程和我管理的python应用程序之间共享数据的最快方式。我目前使用套接字,但是当使用高带宽数据( 30 fps的4K图像)时,它太慢了。
我最终想要使用多处理共享存储器,但我的第一次尝试表明它不起作用。我在C++中使用Boost.Interprocess创建共享内存,并尝试在python中读取它,如下所示:
#include <boost/interprocess/shared_memory_object.hpp>
#include <boost/interprocess/mapped_region.hpp>
int main(int argc, char* argv[])
{
using namespace boost::interprocess;
//Remove shared memory on construction and destruction
struct shm_remove
{
shm_remove() { shared_memory_object::remove("myshm"); }
~shm_remove() { shared_memory_object::remove("myshm"); }
} remover;
//Create a shared memory object.
shared_memory_object shm(create_only, "myshm", read_write);
//Set size
shm.truncate(1000);
//Map the whole shared memory in this process
mapped_region region(shm, read_write);
//Write all the memory to 1
std::memset(region.get_address(), 1, region.get_size());
std::system("pause");
}
还有我的python代码:
from multiprocessing import shared_memory
if __name__ == "__main__":
shm_a = shared_memory.SharedMemory(name="myshm", create=False)
buffer = shm_a.buf
print(buffer[0])
我得到一个系统错误FileNotFoundError: [WinError 2] : File not found
。因此,我想它只在Python多处理内部工作,对吗?Python似乎找不到在C++端创建的共享内存。
另一种可能是使用mmap,但我担心这不像“纯”共享内存(不使用文件系统)那么快。如Boost.interprocess文档所述
但是,由于操作系统必须将文件内容与内存内容同步,内存映射文件的速度不如共享内存。
不过,我不知道它在多大程度上慢下来了。我只是更喜欢最快的解决方案,因为这是我的应用程序目前的瓶颈。
发布于 2021-11-02 07:11:31
C++和python之间使用共享内存和内存映射的通信示例可以在https://stackoverflow.com/a/69806149/2625176中找到。
https://stackoverflow.com/questions/69091769
复制相似问题