【问题标题】:Embedding Python into C++ application将 Python 嵌入到 C++ 应用程序中
【发布时间】:2011-02-11 17:09:54
【问题描述】:

上下文:

我们一直面临的一个持续问题是对我们的市场数据应用程序进行单元测试。这些应用程序坐下来观察从提要中检索到的数据并做一些事情。一些难以触发的关键事件很少发生,测试人员很难验证我们的应用程序在所有情况下都能正确执行,因此我们必须依赖单元测试。

这些系统通常通过在事件发生时发出回调(到我们的应用程序)来工作,然后我们的任务来处理它。

我设想的解决方案:

是否可以嵌入 Python 或扩展(对此不是 100% 明确),以便测试人员可以启动 Python REPL 并发出类似于回调的函数调用,然后由我们的 C++ 类处理。在运行时对我们的对象进行某种形式的动态操作。

【问题讨论】:

    标签: c++ python boost


    【解决方案1】:

    我在我的一个项目中做了类似的事情,使用SWIG 为C++ 代码的相关部分生成python 绑定。然后我按照其他人的建议嵌入解释器。完成后,我可以随意执行 python 代码(例如PyRun_SimpleString),它可以访问 C++ 代码。通常我最终会使用像 Singleton 这样的东西来更容易地从 python 访问特定的 C++ 对象。

    另外值得一提的是 swig python 模块中的directors,它允许更直观地处理虚拟函数。根据您正在做的事情,您可能会发现这些非常有用。

    【讨论】:

      【解决方案2】:

      您想做的事是可能的,但要做到正确并非易事。听起来您想嵌入(而不是扩展)Python。教程here 涵盖了这两个主题。

      从 C++ 类到 Python 类的映射需要做很多工作,而且有很多事情可能会以微妙的方式出错,尤其是内存泄漏和多线程(如果您现有的代码是多线程的)。但是,如果它仅用于测试情况并且稳定性不是关键任务,那么它可能不是问题。

      【讨论】:

        【解决方案3】:

        是的,这是可能的。具体方法见this

        【讨论】:

          猜你喜欢
          • 2015-01-18
          • 1970-01-01
          • 2011-11-22
          • 1970-01-01
          • 2010-09-08
          • 1970-01-01
          相关资源
          最近更新 更多