一个pybind11的例子

在当前文件夹下安装pybind11后,第一步,编写CPP文件

1、cpp_sources/data_processor.h

#include <random>
#include <vector>
 
class DataProcessor {
 public:
  DataProcessor() = default;
  void setData(std::vector<int> input_data);
  int process();
 private:
  std::vector<int> data_;
};

2、cpp_sources/data_processor.cpp

#include "data_processor.h"

#include <numeric>

void DataProcessor::setData(std::vector<int> input_data) {
    data_ = std::move(input_data);
}

int DataProcessor::process() {
    return std::accumulate(data_.begin(), data_.end(), 0);
}

3、pybind_cpp_sources.cpp

#include <pybind11/detail/common.h>
#include <pybind11/pybind11.h>
#include <pybind11/stl.h>

#include "cpp_sources/data_processor.h"

namespace py = pybind11;
PYBIND11_MODULE(pybind_cpp_module, m) {
  py::class_<DataProcessor>(m, "DataProcessor")
      .def(py::init())
      .def("setData", &DataProcessor::setData)
      .def("process", &DataProcessor::process);
}

第二步,编写Python文件

1、python_sources/data_processor.py

import random


class DataProcessor:
    def __init__(self):
        self.data = list()
        self.random_seed = 0

    def set_data(self, input_data: list) -> None:
        self.data = input_data

    def process(self) -> int:
        return sum(self.data) 

2、python_sources/__init__.py,该文件为空即可。

3、python_interface.py

import pybind_cpp_module
import python_sources.data_processor

input_data = list(range(10))

cpp_data_processor = pybind_cpp_module.DataProcessor()
cpp_data_processor.setData(input_data)
print("C++ data processor output: {}".format(cpp_data_processor.process()))

python_data_processor = python_sources.data_processor.DataProcessor()
python_data_processor.set_data(input_data)
print("Python data processor output: {}".format(python_data_processor.process()))

第三步,编写编译文件CMakeLists.txt

cmake_minimum_required(VERSION 3.5)
project(example LANGUAGES CXX)

set(SOURCES cpp_sources/data_processor.cpp)

add_subdirectory(pybind11)
pybind11_add_module(pybind_cpp_module pybind_cpp_sources.cpp ${SOURCES})

第四步,编译运行:

cmake . && make
python python_interface.py

  

posted @ 2024-05-07 17:18  南乡水  阅读(23)  评论(0编辑  收藏  举报