首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用共享内存实现C++与python之间的快速通信

使用共享内存实现C++与python之间的快速通信
EN

Stack Overflow用户
提问于 2021-09-07 16:33:45
回答 1查看 1.7K关注 0票数 3

在跨平台(Linux和windows)实时应用程序中,我需要在C++进程和我管理的python应用程序之间共享数据的最快方式。我目前使用套接字,但是当使用高带宽数据( 30 fps的4K图像)时,它太慢了。

我最终想要使用多处理共享存储器,但我的第一次尝试表明它不起作用。我在C++中使用Boost.Interprocess创建共享内存,并尝试在python中读取它,如下所示:

代码语言:javascript
复制
#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代码:

代码语言:javascript
复制
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文档所述

但是,由于操作系统必须将文件内容与内存内容同步,内存映射文件的速度不如共享内存。

不过,我不知道它在多大程度上慢下来了。我只是更喜欢最快的解决方案,因为这是我的应用程序目前的瓶颈。

EN

回答 1

Stack Overflow用户

发布于 2021-11-02 07:11:31

C++和python之间使用共享内存和内存映射的通信示例可以在https://stackoverflow.com/a/69806149/2625176中找到。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69091769

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档