boost python公开和导入方法的时间成本

时间:2014-03-12 20:15:23

标签: python c++ boost boost-python

我在使用boost python工具将我的C ++代码扩展到Python时遇到了困难。我已经成功编写了boost.python包装器。我也可以从Python访问我的C ++对象而没有任何错误,此外还可以使用boost attr("")()函数从C ++中调用Python文件(模块)方法,没有任何问题。

我的问题是Python方法的执行时间。在我编写的Python代码中,对包装对象的引用大概是微秒。尽管调用Python方法所花费的时间大约是几毫秒,但它相对于我在Python中对我的包装C ++对象所做的引用数量的增加(并且只引用/赋值没有任何进一步的使用)。因此,我进行了一些搜索,我对这个增加的时间的假设是:

  1. 一些参考策略(默认策略)通过在从Python代码返回时执行一些不必要的操作来导致此问题。所以我可能在包装器中做错了。
  2. Boost.Python调用方法有一些开销,可能有一些我不知道的选项。
  3. 值得一提的是,在我的程序的每个执行周期中都调用了Python方法,并且每次都得到一个非常相同(不精确)的时间。

    我希望我的描述足够了。以下是我的示例代码的一部分:

    我的一个包装工具:

    class_<Vertex<> >("Vertex")
      .def(init<float, float>())
      .def_readwrite("x", &Vertex<>::x)
      .def_readwrite("y", &Vertex<>::y)
      .def("abs", &Vertex<>::abs)
      .def("angle", &Vertex<>::angle)
      .def(self - self)
      .def(self -= self)
    ;
    

    调用Python模块方法(&#34;运行&#34;):

    pyFile = import(fileName.c_str());
    scope scope1(pyFile);
    object pyNameSpace = scope1.attr("__dict__");
    return extract<int>(pyFile.attr("run")());
    

0 个答案:

没有答案