将Python嵌入C++应用程序

5 投票
3 回答
3568 浏览
提问于 2025-04-16 11:39

背景:

我们一直面临的一个问题是对市场数据应用进行单元测试。这些应用程序会监控从数据源获取的数据,并进行处理。有些关键事件很难触发,发生的频率也很低,因此测试人员很难验证我们的应用在各种情况下是否正常工作,所以我们不得不依赖单元测试。

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

我设想的解决方案:

有没有可能嵌入Python,或者扩展(这方面我不太清楚),这样测试人员就可以启动一个Python交互式环境,发出类似回调的函数调用,然后由我们的C++类来处理。这是一种在运行时动态操作我们对象的方式。

3 个回答

3

是的,这是可能的。你可以查看这个链接,里面有详细的步骤。

4

你想做的事情是可能的,不过要做到这一点并不简单。听起来你是想把Python嵌入到你的程序中,而不是去扩展Python。关于这两个主题,你可以在这个教程中找到相关内容:这里.

把C++的类映射到Python的类上需要做很多工作,而且在这个过程中可能会出现一些微妙的问题,特别是内存泄漏和多线程问题(如果你现有的代码是多线程的)。不过,如果只是用于测试而且稳定性不是特别关键,那可能问题就没那么大。

7

在我的一个项目中,我做了类似的事情,使用SWIG来为C++代码的相关部分生成Python的接口。然后,我像其他人建议的那样,把解释器嵌入进去。这样一来,我就可以随意执行Python代码(比如说PyRun_SimpleString),而且这些代码可以访问C++的内容。通常,我会使用类似单例模式的东西,这样可以更方便地从Python访问特定的C++对象。

另外,值得一提的是在SWIG的Python模块中有directors,它们可以让虚拟函数的处理变得更加直观。根据你具体的需求,你可能会发现这些功能非常有用。

撰写回答