问题:
目前在适配一款sensor,但是该sensor不支持python接口,初步思想是基于ctypes完成对.so的python封装,使其较好的兼容python工具。然而事与愿违,发现C++封装在.so中的函数需要传自定义类的指针引用型。然而该自定义类型被封装到.so中,并且sensor服务商不愿意外露。因此ctypes无法直接复制该类,为了解决这个问题,跟师弟沟通考虑基于进程通信的方式来解掉这类问题(python_extension太难写,并且很容易内存泄漏,不想碰)
背景知识:
- 跨域语言的进程通信问题
- .so动态库的使用
- C++编程入门
- Python语言ctypes库使用入门
First — 跨域语言的进程通信问题
- 文件方式 (易实现,稳定,无内存泄漏问题)
- socket方式 (不好写)
- 单向管道 (感觉相对优雅)
- 信号方式 (好写)
- 共享内存(数据结构C++提供,python用ctypes解析,求解问题的白月光)
- 直接完成C++封装,之后python调用(对方给了.so, 不给自己基于cython封装的机会)
基于单向管道:
单向管道受操作系统控制,在系统计算占用率较高情况下,会导致接收数据方抓不到数据,而当系统资源被释放的时刻,缓冲区被扩大,接收方会一下抓大大量来自缓冲区数据,这对实时性要求较高的工具并不友好,需要实时flush(清空缓冲区,写入文件,这里值得注意的是python的print方法竟然也是有缓冲的,需要实时flush不然在特定的case下就会导致内存泄漏)