2020.12.20 实现Python同C之间的进程通信

问题:
目前在适配一款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下就会导致内存泄漏)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值