Common Information
Python 接口概览
AimRT 基于 pybind11 对 CPP 接口进行了封装,提供了一套 Python 接口,包名为aimrt_py
,其风格与 CPP 接口非常类似。
与 Cpp 接口类似,Python 接口也包括两部分:
用于业务逻辑开发的接口,核心是
CoreRef
句柄的使用;用于部署运行的接口,核心是如何获取
aimrt::CoreRef
句柄并区分 AimRT 运行阶段;
Python 业务逻辑开发接口的核心是CoreRef
句柄,开发者可以通过此句柄来调用 AimRT 的各种能力,例如日志、RPC、Channel 等。关于CoreRef
句柄的相关信息,请参考CoreRef文档。
与 Cpp 接口不同的是,Python 部署运行接口只支持 App 模式,详情请参考Runtime Interface文档。
Python 接口中的引用类型
Python 接口中,大部分句柄都是一种引用类型,具有以下特点:
这种引用类型一般比较轻量,拷贝传递不会有较大开销。
这种引用类型一般都提供了一个
operator bool()
的重载来判断引用是否有效。调用这种引用类型中提供的接口时,如果引用为空,会抛出一个异常。
AimRT 生命周期以及接口调用时机
参考接口概述,AimRT在运行时有三个主要的阶段:
Initialize 阶段
Start 阶段
Shutdown 阶段
一些接口只能在某些特定阶段里被调用。后续文档中,如果不对接口做特殊说明,则默认该接口在所有阶段都可以被调用。
大部分接口的实际表现需要根据部署运行配置而定
在逻辑实现阶段,开发者只需要知道此接口在抽象意义上代表什么功能即可,至于在实际运行时的表现,则要根据部署运行配置而定,在逻辑开发阶段也不应该关心太多。
例如,开发者可以使用log
接口打印一行日志,但这个日志最终打印到文件里还是控制台上,则需要根据运行时配置而定,开发者在写业务逻辑时不需要关心。
Python 接口支持的协议
AimRT Python 接口目前只支持 Protobuf 协议作为 RPC、Channel 的消息类型,这与 CPP 接口有所不同。使用时依赖protobuf
包,请确保本地 Python 环境中有合适版本的protobuf
包。