如何使用 c++ boost::进程间库通过命名共享内存与Python通信?
目的:让c++进程与本机上的python进程进行通信,打算使用共享内存进行通信。 C++使用boost::interprocess库通过shared_memory_object创建命名共享内存,并向其中写入数据,而python则读取相应的数据。
问题:python如何根据c++中对应共享内存的名称来访问数据?
这是我写的剪辑:
struct test_datas {
char name[128];
char sender[128];
union u_data {
char s1_[1024];
long l1_;
double d_;
} u_member;
};
void write_shared_memory() {
using namespace boost::interprocess;
shared_memory_object shdmem(open_or_create , "monika", read_write);
shdmem.truncate(sizeof(test_datas));
mapped_region region(shdmem , read_write);
auto *data_ptr = static_cast<test_datas *>(region.get_address());
sprintf(data_ptr->name , "%s" , "named");
sprintf(data_ptr->sender , "%s" , "myself");
data_ptr->u_member.d_ = 66.890;
}
这是相应的Python代码:
from multiprocessing import shared_memory
if __name__ == "__main__":
shm_a = shared_memory.SharedMemory(name="monika", create=False)
buffer = shm_a.buf
print(buffer[0])
error: FileNotFoundError: [WinError 2] The system cannot find the file specified: 'monika'
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
假设这里使用 POSIX(例如 Linux),两者都会创建 SHM“文件”,所以说 Ubuntu /dev/shm/monika。
然而,Python 默认情况下似乎会尝试清理它。参见文档:
然而,这表明Python共享内存设施的通用性远不如平常,请参见退出时删除的共享内存
Assuming POSIX (e.g. Linux) here, both create SHM "files", so on say Ubuntu /dev/shm/monika.
However, it seems that Python by default attempts to clean it up. See docs:
However, this suggests that the Python shared memory facility is much less general purpose than usual, see e.g. Shared memory deleted at exit