c++和python共享内存例子
时间: 2025-01-09 12:34:59 浏览: 1
### C++ 和 Python 之间的共享内存示例代码
#### 使用 `Boost` 库和 `psutil` 实现跨语言共享内存通信
为了实现C++和Python间的高效数据交换,可以采用基于共享内存的方式。这种方式不仅能够减少进程间通信的开销,还能显著提升性能。
对于Python端而言,在技术要求上指出Python版本需为3.8以上以支持共享内存操作[^1]。而C++端则依赖于Boost库中的`interprocess`组件来管理共享内存区域,推荐使用的最低版本为1.66。
以下是具体的实施方法:
##### Python 端 (sender.py)
```python
import psutil
from multiprocessing import shared_memory
def collect_system_info():
cpu_percent = psutil.cpu_percent(interval=1)
memory_info = psutil.virtual_memory()
system_data = {
'cpu_usage': cpu_percent,
'memory_total': memory_info.total,
'memory_used': memory_info.used
}
return system_data
if __name__ == "__main__":
shm_name = "sysinfo_shm"
try:
# 尝试连接到已存在的共享内存对象;如果不存在,则创建新的
existing_shm = shared_memory.SharedMemory(name=shm_name, create=True, size=4096)
sys_info = collect_system_info()
data_str = f"{sys_info['cpu_usage']},{sys_info['memory_total']},{sys_info['memory_used']}"
byte_array = bytearray(data_str.encode('utf-8'))
existing_shm.buf[:len(byte_array)] = byte_array
print(f"Data written to shared memory {shm_name}")
except FileExistsError as e:
print(e)
```
这段代码展示了如何使用Python收集系统的CPU利用率以及内存状态,并将其序列化成字符串形式存入共享内存中。
##### C++ 接收方 (receiver.cpp)
```cpp
#include <boost/interprocess/shared_memory_object.hpp>
#include <boost/interprocess/mapped_region.hpp>
#include <iostream>
using namespace boost::interprocess;
int main() {
const char* shmem_name = "sysinfo_shm";
// 打开现有的共享内存对象
shared_memory_object shm(open_only, shmem_name, read_write);
// 映射整个共享内存区到当前进程中
mapped_region region(shm, read_only);
std::string_view content(static_cast<char*>(region.get_address()), region.get_size());
auto null_pos = content.find('\0');
if(null_pos != std::string_view::npos){
content.remove_suffix(content.size()-null_pos);
}
while (!content.empty()) {
double value;
int items_read = sscanf_s(content.data(), "%lf", &value);
if(items_read>0){
printf("Read from Shared Memory: %f\n", value);
break;
}else{
++content;
}
}
return 0;
}
```
此部分实现了接收来自Python发送的数据逻辑,通过读取共享内存内的信息并解析出相应的数值。
阅读全文