比如使用pybind11可以封装一个c++类对应到python中。python的底层大都使用c++进行封装,可以利用c++的计算性能和python的便利性。
如何用pybind11定义一个模块呢?用下面的代码简单解释下。
//表示module的名称叫yolo,到时候python中import的包的名字也是这个
//m其实是一个模块的实例对象,可通过查看源码中PYBIND11_MODULE的定义知晓
//PYBIND11_MODULE就是一个宏
PYBIND11_MODULE(yolo, m){
//m.def表示定义了一个函数
m.def(
"compileTRT", compileTRT,//第一个参数表示定义的函数的名称,第二个参数表示关联的是哪个实际的c++函数
//py::arg用法是告诉python调用层能看到定义的函数中的参数名称是什么
//后面的= 表示默认的参数,这就相当于我们在python中定义一个函数指定好默认值是一样的
py::arg("max_batch_size"),
py::arg("source"),
py::arg("output"),
py::arg("fp16") = false,
py::arg("device_id") = 0,
py::arg("max_workspace_size") = 1ul << 28
);
}
refer:
C++中的 # 和 ##:常用于宏定义
python调用C++之pybind11入门: .pyd (Windows 平台) 或 .so (Linux 平台) 文件,才可作为模块 import 导入使用。